在Node.js中锁定Promises链接

时间:2017-12-03 06:24:28

标签: node.js multithreading promise es6-promise

我有一个REST API,它一个接一个地执行一系列异步任务。代码如下所示:

asyncFunc1()
.then(asyncFunc2())
.then(asyncFunc3())
.then(asyncFunc4())

第一步将执行一些数据库查询,最后一步将更新数据库。当然(因为我来自java / c ++背景),我将在我的promises链接的开头添加一个锁,以确保与数据库的交互受到保护。

但我是Node.js的新手,它在单线程模式下的异步处理让我困惑。因此,我应该在我的承诺链的开头添加一个锁,或者在涉及数据库操作的每一步添加锁,或者我根本不需要锁?

--------更新---------

正如一条评论和答案所指出的那样,我写错了链(我的实际代码是正确的,只是表示我是node.js的新手:$)

  asyncFunc1()
  .then(asyncFunc2)
  .then(asyncFunc3)
  .then(asyncFunc4)

我实际上在我的链的开头使用Redlock,我不确定这是不是一个好主意。 Rahul Singh提供的答案说我不需要锁!

1 个答案:

答案 0 :(得分:0)

  

当你使用新的Promise()创建一个promise时,它被调用,所以全部   你的函数实际上是在创建时执行的,而不是在何时执行的   你链接他们。

您的连锁功能应该像

asyncFunc1().then(asyncFunc2).then()...

asyncFunc1应该是一个返回promise而不是promise本身的函数。

看看这个article,了解更多关于诺兰劳森的承诺