NodeJS结合了链接同步和异步功能

时间:2016-09-09 09:18:58

标签: node.js asynchronous promise es6-promise

我有一个main函数,用于执行特定查询并解析响应。该函数的第一步是验证给该函数的参数。然后我将生成查询,签名然后发送它。最后,我会处理回应。

为了发送查询,我想使用promise模式。我想要的是主要功能将返回一个承诺。问题是,大多数函数都是同步而不是异步,所以我不应该使用promise。我想要的是这样的:

return this.validateQueryAttributes(attributes)
  .then(generateQuery)
  .then(signQuery)
  .then(sendQuery)
  .then(handleResponse);

问题是,第一个函数没有返回一个promise。因此我不能将其与其他函数链接起来,因为当时的模式希望得到一个承诺。此外,我有一个级别的.catch函数,我想用来捕获可能在我正在调用的任何函数中发生的错误条件。如果我不将第一个函数与其余函数链接起来,那么第一个函数中发生的错误就不会被捕获?

1 个答案:

答案 0 :(得分:1)

您可以使用then启动承诺链,然后使用同步(并可能抛出)函数作为return Promise.resolve(attributes) .then(this.validateQueryAttributes) // you might need .bind(this) .then(generateQuery) .then(signQuery) .then(sendQuery) .then(handleResponse); 处理程序:

(foo *) 0

或者,如果您使用的是Bluebird等库,则还可以使用Promise.tryPromise.method来捕获同步异常。