javascript - 如何递归调用promise函数

标签 javascript recursion promise

我正在尝试使用 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/

相关文章:

javascript - 是否可以从浏览器发送 ipp 打印作业?

javascript - Jquery中的数据检索错误

c++ - 尾递归可以应用于此代码吗?

java - 递归方法中不需要返回

javascript - 在 JavaScript 中返回一个 promise

javascript - 回显页面上出现次数最多的 5 个单词

javascript - 为什么 $timeout 会影响 $stateParams 在 ui-bootstrap 模式中的解析方式?

c - 树函数的递归代码?

javascript - 使用 continuation-local-storage 时如何解决 promise ?

node.js - Node mysql2 异步等待 try catch