2016-08-04 91 views
0

,所以我想通过帕萨特承诺这样一个jQuery Ajax请求:JavaScript的承诺<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

预期结果是什么?我会期待'承诺{:“待定”}' –

+1

只是想知道,你为什么手动创建一个承诺? '$ .ajax'返回一个承诺。如果你想坚持本地实现,只需使用'Promise.resolve()。然后(function(){return $ .ajax()})' –

+0

@RolandStarke就像我的'foo.php'发送的对象数组'[0]:{bool:'foo',id:'bar'}' –

回答

0

是的,不幸的是,在处理异步JavaScript的时候,很多事情中的一件事情在早些时候绊倒了很多人。

作为您正在尝试执行的操作的替代方法,您可以按照与此相同的方式分配foo,然后将该Promise作为参考。然后,当您需要ajax请求的结果时,请使用.then()

foo.then(ajaxResult => console.log(ajaxResult));