Javascript 在NodeJS中的Promissized cicle内的Promissized cicle
我对NodeJS中的承诺有问题,甚至我还以为我在使用蓝鸟。在以下代码中:Javascript 在NodeJS中的Promissized cicle内的Promissized cicle,javascript,node.js,asynchronous,bluebird,Javascript,Node.js,Asynchronous,Bluebird,我对NodeJS中的承诺有问题,甚至我还以为我在使用蓝鸟。在以下代码中: var Promise = require('bluebird'); var google = require('utils/google'); // list of (max 60 * number of types defined) nearby places var nearby_places = []; Promise.each(config.type.nearby, function (type) {
var Promise = require('bluebird');
var google = require('utils/google');
// list of (max 60 * number of types defined) nearby places
var nearby_places = [];
Promise.each(config.type.nearby, function (type) {
google.nearbySearch(request.query.lat, request.query.lng, request.query.rad, type)
.then(function (places) {
// list of (max 60) places
var detailed_places = [];
console.log('Found ' + places.length + ' places.');
// Get full details of places and insert them into database
Promise.each(places, function (place_id) {
google.getPlaceDetails(place_id)
.then(function (res) {
detailed_places.push(res);
})
.catch(function (err) {
console.log(err);
});
})
.then(function () {
// Push detailed places to nearby places
nearby_places = nearby_places.concat(detailed_places);
});
})
.catch(function (err) {
console.log(err);
});
}).then(function () {
// Returns (max 60 * number of types defined) nearby places
return reply(nearby_places);
});
它执行google.nearbySearch()
并在其中打印一些东西,所以我知道它正在运行。但是当它结束时,它不会等待内部的承诺。每个(位置,
。它直接进入返回回复(…
,附近的位置为空。然后,它在控制台中显示我找到了X个位置。
我不认为我完全理解Promises/Bluebird,但我不知道我做错了什么。问题是你没有从返回Promise
。然后()
链接到google.nearbySearch(request.query.lat,request.query.lng,request.query.rad,type)
您应该能够通过从返回Promise.each(places,function(){})
来解决问题。然后()
链接到initialgoogle.nearbySearch(request.query.lat,request.query.lng,request.query.rad,type)
call
return Promise.each(places, function(){})
问题是您没有从返回一个承诺
。然后()
链接到google.nearbySearch(request.query.lat,request.query.lng,request.query.rad,type)
您应该能够通过从返回Promise.each(places,function(){})
来解决问题。然后()
链接到initialgoogle.nearbySearch(request.query.lat,request.query.lng,request.query.rad,type)
call
return Promise.each(places, function(){})
您可能还需要从中返回
。each()
调用“如果迭代器函数返回一个promise或thenable,则在继续下一次迭代之前等待该promise的结果。”我还需要返回google.nearbySearch(…
除了您的答案之外。谢谢!您可能还需要从中返回google.getPlaceDetails(place_id)
。each()
调用,“如果迭代器函数返回一个承诺或一个表,那么在继续下一次迭代之前,将等待承诺的结果。”除了你的答案,我还需要返回google.nearbySearch(…
),谢谢!