使用异步模块节点从函数返回值



我正在尝试编写一个使用异步模块的并行函数并将值返回到调用函数的函数,例如So ...

_refillActivePool() {
    let _this = this;
    let currentCnt;
    async.parallel([
            function (callback) {
                Participants.count()
                .then(count => {
                    currentCnt = count;
                    callback();
                });
            },
            function (callback) {
                Participants.fetchAll()
                .then(results => {
                    let participants = [];
                    results.forEach(result => {
                        participants.push(result.get('full_name'));
                    });
                    _this._addToActivePool(participants);
                    callback();
                });
            }
        ],
        function (err) {
            if (err) {
                throw err;
            }
            return currentCnt;
        }
    );
}

调用功能看起来像这样

pick() {
    return ActivePool.count()
    .then(count => {
        if (!count) {
            console.log(`new count: ${this._refillActivePool()}`);
        }
    });
}

在调用函数中记录返回值时,我会得到一个未定义的值。有人可以向我提供一些指导,以实现这一目标或实现我的目标的更好方法。预先感谢!

让您的功能返回承诺(在其上使用.then())您必须做类似的事情:

_refillActivePool() {
    return new Promise(resolve, reject) {
        let _this = this;
        let currentCnt;
        async.parallel([
                function (callback) {
                    Participants.count()
                    .then(count => {
                        currentCnt = count;
                        callback();
                    });
                },
                function (callback) {
                    Participants.fetchAll()
                    .then(results => {
                        let participants = [];
                        results.forEach(result => {
                            participants.push(result.get('full_name'));
                        });
                        _this._addToActivePool(participants);
                        callback();
                    });
                }
            ],
            function (err) {
                if (err) {
                    return reject(err);
                }
                resolve(currentCnt);
            }
        );
    });
}

然后将其运行为:

_refillActivePool().then(value => {
  // use the value here
}).catch(error => {
  // handle error here
});

注意:未测试。除了我修复的问题外,它可能仍然存在一些问题。

相关内容

  • 没有找到相关文章

最新更新