【发布时间】:2017-05-09 21:36:43
【问题描述】:
我非常确信我误解了 Promise 的工作原理,但很多阅读都未能解决我的问题。
我有一个调用另一个模块的现有代码,该模块刚刚被更改为使用 Promise。使用旧版本看起来像这样:
function(params, cb) {
.....
asyncFunc(p1, (err, res) => {
if (!err)
.....
cb(null,'msg');
else
cb(err);
};
};
将其更改为:
function(params, cb) {
.....
asyncFuncwithPromise(p1).then(res = > {
... // X
return cb(null,'msg');
}).catch(err => {
cb(err);
});
如果第 X 行的代码抛出异常,这将进入 catch()->then() 的无限循环。从捕获中删除回调,一切都很好。谁能解释一下?
【问题讨论】:
-
我从来没有遇到过这种情况,但是写过类似的代码。与您的
asyncFuncwithPromise和cb有关。你的函数是如何使用的,asyncFuncwithPromise是如何定义的? -
需要看那个CB功能。它在做你期望的事情吗?它返回和/或做什么?
-
谢谢,我会深入研究 CB 功能(这不是我的),我只是想检查一下我所做的基本操作是否被误导。
-
您发布的伪代码没有问题。我们必须查看真实代码(包括传入的回调中发生的情况),以便了解无限循环的来源。这个问题可能无法回答。
-
现在你正在使用 Promise,通过返回一个 Promise 使你的函数“thenable”。现在从函数中清除
cb- 它不需要。
标签: javascript node.js promise bluebird