调试Node中的承诺可能很困难,需要包装承诺代码。一个可以帮助的实用程序:
node.util.promiseId():返回正在执行的当前承诺的id。
所以我可以:
function bar() {
// return some common computation part
console.log('working on promise', node.util.promiseId());
function foo(result) {
// promise analyzed results from some complicated way.
bar();
...
}
fetch().then(foo)...
ES6承诺有什么特别之处吗?
澄清一下:我目前在调试promises时使用拦截器,所以我的调试输出看起来像这样:
prolog: new A1 chain
prolog: (A1).then new A2
prolog: (A2).then new A3
prolog: (A3).then new A4
prolog: new B5 chain from argument
prolog: (B5).then new B6
prolog: A2 fulfills
prolog: A3 fulfills
prolog: A4 fulfills
prolog: B6 fulfills
能够识别导致代码执行的承诺将大大有助于识别异常竞争条件和资源冲突。