递归调用promise函数

时间:2015-10-01 11:20:09

标签: javascript node.js promise

我将如何编写递归调用自身的promise函数?我最终的结果如下所示。

{{1}}

运行代码时没有记录任何内容。我在这做错了什么?

2 个答案:

答案 0 :(得分:3)

不要使用explicit construction

如果您 使用它,resolve会吸收传入其中的承诺:

function myPromiseFunction(input) {
    return new Promise(function(resolve, reject) {
        //compute something with input and got new input so again calling
        //myPromiseFunction
        if (newInput) {
            resolve(myPromiseFunction(newInput)); // will wait for inner promise
        }
        else {
            resolve(output);
        }
    });
}

引用规范:

  

传递给executor函数的resolve函数接受单个参数。执行程序代码最终可以调用resolve函数来指示它希望解析关联的Promise对象。传递给resolve函数的参数表示延迟操作的最终值,可以是实际的实现值或另一个Promise对象,如果满足该值,它将提供值。

答案 1 :(得分:0)

我假设“使用输入计算内容”是此流程的异步部分,并且它返回一个解析为[output, newInput]的promise。如果这个假设是错误的,请纠正我。

根本不需要构造函数。你可以简单地说:

,而不是在承诺之后构建承诺,然后用其他承诺的结果解决它
function getOutput(input) {
  return computeSomething(input) .
    then(([output, newInput]) => newInput ? getOutput(newInput) : output);
}