我正在尝试编写一个使用异步模块的并行函数的函数,并将值返回给调用函数,如此...
_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()}`);
}
});
}
当我在调用函数中记录返回值时,我得到一个未定义的值。有人可以给我一些指导,告诉我如何实现这个目标,或者更好地实现我的目标。提前谢谢!
答案 0 :(得分:0)
为了让你的函数返回一个promise(需要使用.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
});
注意:这未经过测试。它可能仍然有一些问题,而不是我修复的问题。