给出以下数组值:
var sportList = ['football', 'volleyball'];
我想使用以下每个值在mongo数据库上运行查询:
function myFunc(sport, callback) {
mongoDB.sports.find({'name': sport}, function (error, result) {
if (error) {
callback(error)
} else {
callback(null, result)
}
})
}
所以我建立了我的承诺,如:
var promises = sportList.map(function(val){
return myFunc(val);
});
然后尝试在promise all chain中运行all:
Promise.all(promises)
.then(function (result) {
console.log('log results: ', result);
})
.catch(function (error) {
console.log(error);
});
但这不起作用,因为它抱怨callback
未定义,我该如何正确解决这个问题?
答案 0 :(得分:2)
错误的原因是您在不提供myFunc
参数的情况下调用callback
方法。
解决方案是用以下代替myFunc
函数。此函数将返回新的Promise
。我没有测试下面的代码,但它应该工作。
function myFunc(sport) {
return new Promise((resolve, reject) => {
mongoDB.sports.find({'name': sport}, function (error, result) {
if (error) {
reject(error);
} else {
resolve(result);
}
})
}));
}