【问题标题】:javascript promise <value> undefinedjavascript 承诺 <值> 未定义
【发布时间】: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 { &lt;state&gt;: "fulfilled", &lt;value&gt;: undefined }

我不明白这里发生了什么,谁能澄清一下?

【问题讨论】:

  • 预期结果是什么?我希望Promise { &lt;state&gt;: "pending"}
  • 只是想知道,你为什么要手动创建一个承诺? $.ajax 返回一个承诺。如果你想坚持原生实现,只需使用Promise.resolve().then(function(){return $.ajax()})
  • @RolandStarke 类似于我的foo.php 发送的对象数组,例如[0]: {bool: 'foo', id: 'bar'}
  • @RolandStarke 为什么要Promise {&lt;state&gt;: "pending"}
  • 如您在developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 所读到的,then 方法返回另一个 Promise。

标签: javascript jquery promise


【解决方案1】:

是的,不幸的是,在处理异步 javascript 时会遇到很多问题,这在早期会遇到很多问题。

作为您尝试执行的操作的替代方案,您可以以与您相同的方式分配foo,然后传递该 Promise。然后当你需要ajax请求的结果时,使用.then()

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

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2015-11-19
    • 2017-01-19
    • 2015-09-27
    • 1970-01-01
    相关资源
    最近更新 更多