围绕整个事情由一个new Promise
电话没有任何帮助。在它里面,你仍然有回拨地狱。不,把Promise.resolve()
扔在一个不返回任何东西的函数也没有帮助。
您需要promisify异步基元,即异步的最小部分。在你的情况,这是distance.matrix
和蒙戈的connect
+ insert
:
function getMatrix(m, o, d) {
return new Promise(function(resolve, reject) {
m.matrix(o, d, function(err, distances) {
if (err) reject(err);
else resolve(distances);
});
});
}
function save(url, store, k) {
// cramming connect+insert in here is not optimal but let's not get into unnecessary detail
return new Promise(function(resolve, reject) {
MongoClient.connect(url, function(err, db) {
if (err)
reject(err);
else
db.collection(k).insert(store, function(err, results) {
if (err) reject(err);
else resolve(results);
db.close();
});
});
});
}
现在我们有了这些,我们实际上可以使用它们,我们的承诺,组合成你实际上是在寻找:
module.exports = Promise.all(dep.map(function(name) {
distance.departure_time(name);
return getMatrix(distance, origins, destinations).then(function(distances) {
if (!distances) throw new Error('no distances');
var promises = [];
if (distances.status == 'OK') {
for (var i=0; i < origins.length; i++) {
for (var j = 0; j < destinations.length; j++) {
var origin = distances.origin_addresses[i];
var destination = distances.destination_addresses[j];
if (distances.rows[0].elements[j].status == 'OK') {
var duration = distances.rows[i].elements[j].duration_in_traffic.value;
var myobj = {
destination: destination,
departure_time: name,
duration: duration
};
var str = destination.replace(/[,\s]+/g, '');
promises.push(save(url, myobj, str));
// ^^^^^^^^^^^^^^^^^^^^^
}
}
}
}
return Promise.all(promises); // now wait for all save results
});
}));
'承诺.all'只有一个参数。顺便说一句,请正确地格式化/缩进您的代码。 –
@ karthik006你无法专门请人来帮助你。堆栈溢出是一个社区,任何人都可以回答并询问。你不会问一个特定的人来帮助你... – Li357
对不起,我已经更新了上面的问题 – karthik006