Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在NodeJS中的Promissized cicle内的Promissized cicle_Javascript_Node.js_Asynchronous_Bluebird - Fatal编程技术网

Javascript 在NodeJS中的Promissized cicle内的Promissized cicle

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) {

我对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) {
    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(){})
来解决问题。然后()
链接到initial
google.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(){})
来解决问题。然后()
链接到initial
google.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(…
),谢谢!