我正在尝试使用 javascript promises 递归调用异步函数,但尚未找到有效的模式。
这就是我想象的效果:
var doAsyncThing = function(lastId){
new Promise(function(resolve, reject){
// async request with lastId
return resolve(response)
}
}
var recursivelyDoAsyncThing = function(lastId){
doAsyncThing(lastId).then(function(response){
return new Promise(function(resolve, reject){
//do something with response
if(response.hasMore){
//get newlastId
return resolve(recursivelyDoAsyncThing(newLastId));
}else{
resolve();
}
});
});
}
recursivelyDoAsyncThing().then( function(){
console.log('done');
});
为什么这行不通?我误解了什么?
有没有更好的模式来解决这个问题?
最佳答案
recursivelyDoAsyncThing
需要返回一个 Promise 才能继续链。在您的情况下,您需要做的就是让 doAsyncThing
返回它的 Promise:
var doAsyncThing = function(lastId){
// Notice the return here:
return new Promise(function(resolve, reject){
然后将 return
添加到您的 doAsyncThing
调用中,如下所示:
var recursivelyDoAsyncThing = function(lastId){
// Notice the return here:
return doAsyncThing(lastId).then(function(response){
关于javascript - 如何递归调用promise函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416823/