2016-08-04 2 views
0

그래서 나는이 같은 약속을 통해 jQuery를 아약스 요청 passa하기 위해 노력하고있어 :<value> 정의되지 않은

var foo; 
foo = bar().then(function(response) { 
    console.log("Success!", response); 
    console.log(foo[0].bool); 
}, function(error) { 
    console.error("Failed!", error); 
}); 

console.log(foo); 

function bar(){ 
    return new Promise(function(resolve, rejected){ 
     $.ajax({ 
      url: 'foo.php', 
      dataType: 'json', 
      success: function (data) { 
       resolve(data); 
      } 
     }).fail(function(xhr){ 
      rejected(xhr); 
     }) 
    }) 
    } 

모든게은 then() 내에서 잘 작동을 console.log 쇼 내가 원하는 정확히 무엇을하지만, 내가 사용하는 console.log(foo)이 표시됩니다. Promise { <state>: "fulfilled", <value>: undefined }

여기에 무슨 일이 일어나고 있는지 이해할 수 없습니까? 누구에게 설명 할 수 있습니까?

+1

예상되는 결과는 무엇입니까? 나는 약속하겠다. { : "pending"}' –

+1

왜 수동으로 약속을하고 있니? '$ .ajax'는 약속을 반환합니다. 네이티브 구현을 고수하고 싶다면'Promise.resolve()를 사용하면된다. (function() {return $ .ajax()})' –

+0

@RolandStarke 내 'foo.php'가 보내는 객체의 배열처럼 '[0] : {bool : 'foo', id : 'bar'}' –

답변

0

예, 불행히도 많은 것들 중 하나가 비동기 자바 스크립트를 처리 할 때 많은 초기에 여행.

당신이하려는 일에 대한 대안으로, 당신이 그것을하고있는 것과 같은 방법으로 foo을 할당 한 다음 그 약속을 대신 전달하십시오. 그런 다음 AJAX 요청의 결과가 필요하면 .then()을 사용하십시오.

foo.then(ajaxResult => console.log(ajaxResult)); 
관련 문제