如何在Promise中返回值?在"然后()"和" catch()"

时间:2018-02-02 08:19:53

标签: node.js promise

我只想返回1并在指定位置返回0。我查看了很多来源,但无法解决这个问题。

以下是代码:

exports.getLatLng = function(row){
    var attractionId = row['attractionid'];
    var attractionName = row['attractionname'] + ' ' + 
    row['Destination_name'];
    var googleMapsResults; 

    return googleMapsClient.geocode({address: attractionName}).asPromise()
    .then((response) => {
        googleMapsResults = response.json.results[0];
        // console.log(googleMapsResults);
        model.dumpIntoMongo(attractionId, googleMapsResults);
        // var y=tmp[0];
        var latitude = googleMapsResults.geometry.location.lat;
        var longitude = googleMapsResults.geometry.location.lng;
        row["id"] = parseInt(attractionId);
        // delete row['attractionid'];
        delete row['destination_id'];
        delete row['destination_name'];
        delete row['attraction_id'];
        delete row['success'];
        // row["lat"] = latitude;
        // row["lon"] = longitude;

        row["latlon"] = latitude.toString() + "," + longitude.toString();
        exports.indexIntoSolr(row);

        return 1; //return 1

    })
    .catch((err) => {
        console.log(err);
        return 0; // return 0
    });

}

2 个答案:

答案 0 :(得分:0)

该方法返回一个待处理的promise,直到它解析为止。要获得值,您需要附加一个值:

 getLatLng(row).then( result => {
    console.log( result );
 });

这肯定会显示01,因为getLatLng的内部实现看起来正确处理了两个执行路径。

答案 1 :(得分:0)

如果您想要另一个更清晰的实施,可以参考这个。

这里,首先编写一个函数,在某些计算后返回一些数据作为promise:

function getSomething(credentials) {

     const {
       name
      } = credentials;

    return new Promise((resolve, reject) => {

      if(everything_as_expected){
           return resolve(some_data)
       }
       else if(some_error){
           return reject(error); 
       }

    });
}

要处理函数返回的结果/数据(承诺),请调用上一个函数:

getSomething(credentials)
        .then((message) => {
          console.log(`${message} got after success.`);
        })
        .catch((error_message) => {
            console.log(error_message);
        });