【发布时间】:2016-12-10 19:29:15
【问题描述】:
所以我试图通过这样的承诺传递一个 jQuery ajax 请求:
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 }
我不明白这里发生了什么,谁能澄清一下?
【问题讨论】:
-
预期结果是什么?我希望
Promise { <state>: "pending"} -
只是想知道,你为什么要手动创建一个承诺?
$.ajax返回一个承诺。如果你想坚持原生实现,只需使用Promise.resolve().then(function(){return $.ajax()}) -
@RolandStarke 类似于我的
foo.php发送的对象数组,例如[0]: {bool: 'foo', id: 'bar'} -
@RolandStarke 为什么要
Promise {<state>: "pending"}? -
如您在developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 所读到的,then 方法返回另一个 Promise。
标签: javascript jquery promise