【发布时间】:2016-12-29 02:24:23
【问题描述】:
我尝试链接承诺。下面的 getExternalMap() 返回一个承诺(处理一个 ajax 调用 => deferred.resolve() 并返回 deferred.promise)。 “第一次链接”被调用没有问题,但“第二次链接”没有被调用,知道为什么吗?
我认为它写得很好,但事实并非如此,我还找不到原因。
var self = this;
getExternalMap().then(function() {
console.log("First chaining");
var parsedMap = self.destinationsApiParser.getSortDestinations();
return self.initProxies(parsedMap);
}).then(function() {
console.log('second chaining');
});
this.initProxies = function(parsedMap) {
var deferred = Q.defer();
var destinationsApiProxy = new DestinationsApiProxy(this.app, parsedMap);
deferred.resolve();
return deferred.promise;
}
【问题讨论】:
-
将
catch()或done()添加到链的末尾以查看任何错误。 -
initProxies不应返回承诺。它不是异步的。 -
多亏了 sirko,才发现问题,initProxies 做的很糟糕,有点安静地崩溃了。另外,Bergi 的评论也不错。谢谢你们俩
-
@FrançoisRichard:是的。
then很神奇,它检测你是否返回一个承诺(并等待它)(并立即解决)。 -
process.on("unhandledRejection", e => { throw e; })应该刷新错误。这适用于 Q 一年多。
标签: javascript node.js promise q