用recursion函数使用promise
我试图找出是否有可能在recursion函数中使用promise而不是标准callback。
我现在的方式是:
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
作为结果参数调用callback,只是
return val;
从then
callback。 而已。
function recursive(data){ return newThenable(data).then(function(val){ if (val.a){ return val; } else { return recursive(val); } }); }
将val
推入数组。 如果val.a
返回结果数组,否则使用val
和累积结果数组作为参数调用recursive
。 看到多个顺序的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)}); } }); }
如今,ES8asynchronous/等待使其更具可读性。 我现在跳过了这个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); } }