用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; 

thencallback。 而已。

 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); } }