之前,我想执行以下代码:等待一个承诺来解决函数返回一个值
exports.myFunction = function(){
myPromise.doThis().then(ret => {
return ret;
});
}
当调用这个函数返回undefined
。如何让函数等待承诺解决然后返回。
之前,我想执行以下代码:等待一个承诺来解决函数返回一个值
exports.myFunction = function(){
myPromise.doThis().then(ret => {
return ret;
});
}
当调用这个函数返回undefined
。如何让函数等待承诺解决然后返回。
是异步的,不能保证知道什么时候解决承诺。它可能需要等待一段时间(取决于你在做什么)。
承诺后继续执行的典型方法是链接执行或使用回调函数。
作为回调
示例代码(我)建议使用一个回调。
exports.myFunction = function(callback){
myPromise.doThis().then(ret => {
callback(ret);
});
}
然后使用将类似于:
var myFunction = require('pathToFile').myFunction;
myFunction(function(ret){
//Do what's required with ret here
});
编辑:
正如@torazaburo提到的,函数可以浓缩成:
exports.myFunction = function(callback){
myPromise.doThis().then(callback);
}
作为一个承诺
exports.myFunction = function(){
//Returnes a promise
return myPromise.doThis();
}
然后使用将类似于:
var myFunction = require('pathToFile').myFunction;
myFunction().then(function(ret){
//Do what's required with ret here
});
谢谢,这很有道理。 – Simar
*完全解决*承诺不会解决一点点。它们要么没有解决,要么解决。此外,你的承诺和回调的混合是相当奇怪的。顺便说一句,'.then(ret => {callback(ret);})'(为什么不必要的大括号?)与说'.then(callback)'几乎相同。但是为什么编写一个函数,其唯一目的是进行异步调用并从调用指定的回调中挂起'then'?相反,让调用者自己指定'then'。 – 2016-05-13 04:35:00
这是真的,他们或者解决或不。为了清楚起见,我将修改我的回复以删除此内容。 您也可以使用'callback'函数作为直接替换,删除不必要的'ret'赋值。我故意选择冗长的方法作为例子。简明的符号通常会让新开发人员感到困惑。 – AXRS
你不能。你只能自己给它一个回调函数,然后在'then'调用中调用回调函数,或者返回另一个约定 –
在JavaScript中,在从函数返回之前,不能“等待”异步操作完成。它根本不会那样工作。相反,您返回承诺并让调用者使用'.then()'来知道结果何时准备就绪。 – jfriend00
顺便说一句,'.then(ret => {return ret;});'(几乎)是空操作。 – 2016-05-13 04:31:04