在Node JS中使用Promises创建字符串

时间:2017-02-27 05:37:28

标签: javascript node.js

我对Node JS中的promises有疑问。 我需要创建一个JSON字符串,其中包含来自两个promise的一些数据,但它不是正确的。这是我的代码:

[Activity(Label = "View for MainActivityView", LaunchMode = LaunchMode.SingleTop, ScreenOrientation = ScreenOrientation.SensorLandscape, ConfigurationChanges = ConfigChanges.UiMode)]

承诺内。字符串有价值,但在外面,结果只有var aux = "{"; geocoder.reverse(initPointReversing) .then(function(initData) { aux += "originAddress:'" + initData[0].formattedAddress + "',"; }) .catch(function(err) { console.log(err); }); geocoder.reverse(endPointReversing) .then(function(endData) { aux += "destinationAddress:'" + endData[0].formattedAddress + "',"; }) .catch(function(err2) { console.log(err2); }); aux += "}";

我如何才能正确使用这些承诺?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用Promise.all

var p1 = geocoder.reverse(initPointReversing)
.then(function(initData) {
    return initData[0].formattedAddress;
});

var p2 = geocoder.reverse(endPointReversing)
.then(function(endData) {
    return endData[0].formattedAddress;
});

Promise.all([p1, p2]).then(function(results) {
    var t = {originAddress: results[0], destinationAddress: results[1]};
    var aux = JSON.stringify(t);
})
.catch(function(err) {
    console.log(err);
});

如果您正在使用最新节点,

var p1 = geocoder.reverse(initPointReversing).then(initData => initData[0].formattedAddress);
var p2 = geocoder.reverse(endPointReversing).then(endData => endData[0].formattedAddress);

Promise.all([p1, p2]).then(([originAddress, destinationAddress]) => {}
    var aux = JSON.stringify({originAddress, destinationAddress});
    // do things
})
.catch(function(err) {
    console.log(err);
});

答案 1 :(得分:0)

试试这个:

Promise.all([geocoder.reverse(initPointReversing),geocoder.reverse(endPointReversing)])
.then(function(values) {
    aux = "{";
    aux += "originAddress:'" + values[0][0].formattedAddress + "',";
    aux += "destinationAddress:'" + values[1][0].formattedAddress + "',";
    aux = "}";
})
.catch(function (err) {
    console.log(err);
});

如何使用Promise.all,您可以查看this