你如何回应承诺?

时间:2014-03-06 17:55:23

标签: 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'));

打印

undefined
promise completed
what I want the result to be

我是异步编程的新手,并不确定我做错了什么。

2 个答案:

答案 0 :(得分: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);
})

如果promiseFunction尚未返回承诺,请查看this section of the Q documentation,了解如何为一些示例和模式构建承诺。

答案 1 :(得分:2)

异步函数不返回(或至少不可靠)。当您从异步函数中获取值时,console.log已经运行了它的内容(在这种情况下,没有任何内容,或undefined)。这是我开始学习时学到的一课。如果你想在异步函数之后发生某些事情,你必须在异步函数内部调用它。

请参阅主题How to return the response from an AJAX call?以获取更多信息和建议。