我将如何编写递归调用自身的promise函数?我最终的结果如下所示。
{{1}}
运行代码时没有记录任何内容。我在这做错了什么?
答案 0 :(得分:3)
如果您 使用它,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);
}