我有一个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提供的答案说我不需要锁!
答案 0 :(得分:0)
当你使用新的Promise()创建一个promise时,它被调用,所以全部 你的函数实际上是在创建时执行的,而不是在何时执行的 你链接他们。
您的连锁功能应该像
asyncFunc1().then(asyncFunc2).then()...
asyncFunc1应该是一个返回promise而不是promise本身的函数。
看看这个article,了解更多关于诺兰劳森的承诺