Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Q未正确链接_Javascript_Node.js_Promise_Q - Fatal编程技术网

Javascript Q未正确链接

Javascript Q未正确链接,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,我试着连锁反应。下面的getExternalMap()返回一个承诺(处理一个ajax调用=>deferred.resolve()并返回deferred.promise)。“第一链”被称为没有问题,但“第二链”没有被称为,你知道为什么吗 我认为它写得很好,但它不是,我还不知道为什么 var self = this; getExternalMap().then(function() { console.log("First chaining"); var parsed

我试着连锁反应。下面的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;
}

如果我理解正确,您希望这样做:

var self = this;
getExternalMap()
    .then(() => console.log("1st chaining"))
    .then(self.destinationsAPIParser.getSortDestinations)
    .then(self.initProxies)
    .then(() => console.log("2nd chaining"))

this.initProxies = function(parsedMap) {
    var deferred = Q.defer();
    var destinationsApiProxy = new DestinationsApiProxy(this.app, parsedMap);
    deferred.resolve();
    return deferred.promise;
}

假设
self.destinationsAPIParser.getSortDestinations
返回承诺。

在链的末尾添加一个
catch()
done()
以查看任何错误。
initproxy
不应返回承诺。它不是异步的。由于sirko发现了问题,initProxies正在做一些事情,并且有点安静地崩溃了。此外,伯吉的话也很好。谢谢你们两位you@Fran理查德:是的
然后
是神奇的,它检测您是否返回承诺(并等待承诺)(并立即解决)。
进程。在(“unhandledRejection”,e=>{throw e;})上
应该清除错误。这对Q有效一年多了。