使用promise无限循环mocha动态创建函数

时间:2016-02-08 00:34:10

标签: javascript recursion promise

8小时后....

不确定发生了什么,但我意识到当我将一个文件写入项目的根目录时,它陷入无限循环。在其他地方,它运作良好。

// UPDATE

仍然在努力。错过了超级碗。我唯一的更新是writeFileSync给出完全相同的错误。

我已经在这个问题上敲了一会儿。

promiseFunction = [promiseFunction1, promiseFunction2, promiseFunction3].reduce((oldFunction, newFunction)=>{
 return function (){
  return oldFunction().then(()=>{
   return newFunction()
   })
  }
 }

当我尝试测试promiseFunction()时,我得到一个无限的测试循环(我的所有测试直到测试promiseFunction继续永久射击)

然而,问题是,承诺功能将其全部搞定是promisify(fs.writeFile)

当我尝试使用其他承诺函数时,例如promisify(fs.readFile), 一切正常。

当我在控制台上记录readFile和writeFile promises之间的区别时,会有相应的结果:

//readFile

    readFilePromise Promise {
  _bitField: 67108864,
  _fulfillmentHandler0: undefined,
  _rejectionHandler0: 
   Promise {
     _bitField: 0,
     _fulfillmentHandler0: undefined,
     _rejectionHandler0: undefined,
     _promise0: undefined,
     _receiver0: undefined },
  _promise0: undefined,
  _receiver0: undefined }

//writeFile

   writeFilePromise Promise {
  _bitField: 67108864,
  _fulfillmentHandler0: undefined,
  _rejectionHandler0: 
   Promise {
     _bitField: 0,
     _fulfillmentHandler0: undefined,
     _rejectionHandler0: undefined,
     _promise0: undefined,
     _receiver0: undefined },
  _promise0: undefined,
  _receiver0: undefined }

我根本不明白为什么我会用writeFile获得这个无限循环。请上帝帮助。

1 个答案:

答案 0 :(得分:0)

如果您想要的是一个系列,那么可能返回一个函数并不是您想要的。主要是因为什么都不会被称为。而是利用承诺链:

[promiseFunction1, promiseFunction2, promiseFunction3]
  .reduce((memo, next) => memo.then(next), Promise.resolve());