javascript承诺<;价值>;未定义

javascript承诺<;价值>;未定义,javascript,jquery,promise,Javascript,Jquery,Promise,因此,我试图通过如下承诺传递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(){ ret

因此,我试图通过如下承诺传递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)
时,它会显示
承诺{:“已完成”,“未定义”}


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

是的,不幸的是,在处理异步javascript时,其中一件事在早期会出现很多问题

作为您尝试做的另一种选择,您可以按照您正在做的方式分配
foo
,然后将该承诺传递给其他人。然后,当您需要ajax请求的结果时,使用
。Then()


预期的结果是什么?我希望
Promise{:“pending”}
只是想知道,为什么要手动创建一个Promise<代码>$。ajax返回承诺。如果您想坚持本机实现,只需使用
Promise.resolve()。然后(function(){return$.ajax()})
@RolandStarke类似于我的
foo.php
发送的对象数组,比如
[0]:{bool:'foo',id:'bar'}
@RolandStarke为什么希望
Promise{:“pending”}
?正如您在then中看到的,该方法返回另一个承诺。
foo.then(ajaxResult => console.log(ajaxResult));