蓝鸟的承诺无法正常工作的原因

时间:2016-06-26 07:52:25

标签: javascript promise bluebird

我有一个实现bluebird.js的API。 我有两种流程基本相同的方法,一种是有效的,另一种则没有。寻找可能出错的想法。

单词流程如下:

  1. 宣传api。
  2. 创建一个使用API​​的承诺数组。
  3. 使用.join.apply来调用数组中的所有promise。
  4. 一些代码:

    _Promise = require('bluebird');
    this.getDataFromSomewhere = function getDataFromSomewhere(array, cb) {
        _Promise.promisifyAll(this);
        let promiseArray = [];
        let keyPrefix = 'some prefix';
        let output = [];
    
        array.forEach(function(obj, i) {
            promiseArray.push(that.foo(keyPrefix + i, function(err, data) {
                output.push({ data });
            }));
        });
    
        _Promise.join.apply(null, promiseArray);
    
        cb(null, output);
    });
    

    现在,我有几种方法可以做到这一点 - 'getDataFromSomewhere_1'& 'getDataFromSomewhere_2'。 问题是1按预期工作,但2不同步工作。 在1中,直到_Promise.join.apply(...)完成后才调用cb。 在2中,之后立即调用cb。

    我正在试图找出可能导致此行为的原因。 也许正在使用的内部库使其异步?

    你会如何调试它? bluebird的api中还有其他工具可以帮助吗? (我查了一堆文档,找不到任何东西)。

    请帮助:)

0 个答案:

没有答案