我有一個在NodeJS Express中定義的路由。節點js - 在所有承諾解決後發送響應
路由多次調用一個函數(返回一個promise)。從這些Promise返回的值被添加到數組中,然後使用res.json()將數組發送回客戶端。
我面臨的問題是,雖然Promise得到解決,但res.json()會執行,因爲它不會等待Promise返回。我認爲需要某種鏈接機制,但是不知道如何去做。
下面是我的代碼
app.get('/markers', function(req, res) {
var markers = [];
var marker1 = {"id": 1, "name": "London"};
// Get the lat and lng based on the address
geocoding(marker1.name).then(function(geocode) {
marker1.lat = geocode[0].latitude;
marker1.lng = geocode[0].longitude;
markers.push(marker1);
}, function(error) {
console.log(error);
})
var marker2 = {"id": 2, "name": "Chicago" };
geocoding(marker2.name).then(function(geocode) {
marker2.lat = geocode[0].latitude;
marker2.lng = geocode[0].longitude;
markers.push(marker2);
}, function(error) {
console.log(error);
})
var marker3 = {"id": 3, "name": "Munich" };
geocoding(marker3.name).then(function(geocode) {
marker3.lat = geocode[0].latitude;
marker3.lng = geocode[0].longitude;
markers.push(marker3);
}, function(error) {
console.log(error);
})
// return the lat and lng array to the client
res.json(markers);
})
我怎樣才能確保 'res.json(標記);'在所有三個Promise解決後執行。