我开始自学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
我是异步编程的新手,并不确定我做错了什么。
答案 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?以获取更多信息和建议。