我有一个main函数,用于执行特定查询并解析响应。该函数的第一步是验证给该函数的参数。然后我将生成查询,签名然后发送它。最后,我会处理回应。
为了发送查询,我想使用promise模式。我想要的是主要功能将返回一个承诺。问题是,大多数函数都是同步而不是异步,所以我不应该使用promise。我想要的是这样的:
return this.validateQueryAttributes(attributes)
.then(generateQuery)
.then(signQuery)
.then(sendQuery)
.then(handleResponse);
问题是,第一个函数没有返回一个promise。因此我不能将其与其他函数链接起来,因为当时的模式希望得到一个承诺。此外,我有一个级别的.catch函数,我想用来捕获可能在我正在调用的任何函数中发生的错误条件。如果我不将第一个函数与其余函数链接起来,那么第一个函数中发生的错误就不会被捕获?
答案 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.try
或Promise.method
来捕获同步异常。