您如何在承诺中返回?

Daz*_*sed 3 javascript asynchronous promise

我开始自学JavaScript,并且无法从promise中的函数返回。我的代码本质上看起来像这样:

foobar = function(x,y){
    //code that doesn't matter
    return promiseFunction(
        function(results){
           console.log("promise completed")
           console.log(output)
           return output;}
        function(err){throw error;});

console.log(foobar('1','2'));
Run Code Online (Sandbox Code Playgroud)

此打印

undefined
promise completed
what I want the result to be
Run Code Online (Sandbox Code Playgroud)

我是异步编程的新手,不确定自己在做什么错。

Dis*_*age 5

异步函数不返回(或者至少不可靠)。当您从异步函数中获得一个值时,console.log它已经运行了它所拥有的(在这种情况下,什么都没有,或者undefined)。这是我刚开始学习时刻苦学习的一课。如果您希望在异步函数之后发生某些事情,则必须在异步函数内部调用它。

请参阅线程如何从 AJAX 调用返回响应?了解更多信息和建议。


Ber*_*rgi 5

你没有return承诺。您在完成另一个任务后将其链接起来-重新获得完成该链接任务的新承诺:

function foobar(x,y){
    // Assuming that promiseFunction does return a promise
    return promiseFunction().then(function(results){
         console.log("promise completed")
         console.log(output)
         return output;
    }, function(err) {
         throw error;
    });
}
foobar('1','2').then(function(output) {
    console.log(output);
})
Run Code Online (Sandbox Code Playgroud)

如果promiseFunction尚未返回承诺,请查看文档的此部分,以Q了解如何为一些示例和模式构造承诺。