使用递归函数的承诺
Use promises with recursive function
我想弄清楚是否有可能在递归函数中使用承诺而不是标准回调。
我现在的样子:
function recursive(data, cb){
(function promiseProvider(data){
return newThenable(data).then(function(val){
if(val.a){
cb(null, val);
}
else {
return promiseProvider(val);
}
});
})(data);
}
这可以工作,但是我不知道如何才能使一个纯承诺实现。
也许这将工作?
function recursive(data){
return newThenable(data).then(function(val){
if(val.a){
return // <<< ???
}
else {
return recursive(val);
}
});
}
如果您正在调用回调与val
作为结果参数,只是
return val;
从then
回调。就是这样。
function recursive(data){
return newThenable(data).then(function(val){
if (val.a){
return val;
} else {
return recursive(val);
}
});
}
Push val
到array。如果val.a
返回结果数组,则调用recursive
,并将val
和累积结果数组作为参数。参见multiple, sequential fetch() Promise
function recursive(data, results) {
return newThenable(data).then(function(val) {
if (val.a) {
// results.push(val);
return results
} else {
results.push(val);
return recursive(val, results).catch(function(e) {console.log(e)});
}
});
}
现在ES8的async/await使它更具可读性。我现在跳过了try-catch。
async function recursive(data, results = []) {
let val = await newThenable(data);
if (val.a) {
return results
} else {
results.push(val);
return recursive(val, results);
}
}
相关文章:
- 递归函数中断
- 将jQuery对象传递到setTimeout递归函数中
- 对象与递归函数的比较
- 循环内部的递归函数未按预期工作
- 递归函数返回不正确
- 递归函数编程困境
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 返回不会退出 javascript 中的递归函数
- jquery递归函数转换为非递归函数
- AngularJS,promise带有递归函数
- 如何停止此递归函数
- 如何将下面的递归函数转换为纯函数
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- Javascript递归函数引用了这一点
- 如何将这个递归函数转换为迭代函数
- 多个条件异步递归函数和 jQuery 承诺
- 承诺的递归函数不会触发返回语句
- 理解递归函数的节点.js中的承诺
- 使用递归函数的承诺
- 带有承诺的Javascript递归函数