返回未定义的值 - Node.js

时间:2017-11-14 15:46:04

标签: javascript node.js

我有以下功能,它正确地从响应中获取图像的前缀和后缀,并产生一个变量结果,它保存了场地图像的url。但是当我返回结果时,我一直没有定义。这里出了什么问题?

function getPhotoUrl(venue_id,venue_location,venue_query){
  request({
      url: 'https://api.foursquare.com/v2/venues/'+venue_id+'/photos',
      json:true,
      method: 'GET',
      qs: {
        client_id: 'my_id',
        client_secret: 'my_secret',
        near:venue_location,
        query: venue_query,
        v: '20171114',
        limit: 1
      }
    }, function(err, res, body) {
        var result="";
        if (err) {
          console.error(err);
        } else {
          console.log(body.response.photos.items[0].prefix+"300x500"+body.response.photos.items[0].suffix);      
      }
      result=body.response.photos.items[0].prefix+"300x500"+body.response.photos.items[0].suffix;
      return result; 
    }
  );
}
<!-- begin snippet: js hide: false console: true babel: false -->

1 个答案:

答案 0 :(得分:0)

尝试使用async / await。将您的执行包含在承诺中resolve返回值和reject错误值。这样你就可以等待函数并获得返回值。请记住await会停止执行,直到完成返回的承诺。

function getPhotoUrl(venue_id,venue_location,venue_query){
  return new Promise((resolve, reject) => {
    request({
      url: 'https://api.foursquare.com/v2/venues/'+venue_id+'/photos',
      json:true,
      method: 'GET',
      qs: {
        client_id: 'my_id',
        client_secret: 'my_secret',
        near:venue_location,
        query: venue_query,
        v: '20171114',
        limit: 1
      }
    }, function(err, res, body) {
        var result="";
        if (err)
          reject(err);     
      }
      result=body.response.photos.items[0].prefix+"300x500"+body.response.photos.items[0].suffix;
      resolve(result);
    });
  })
}

await getPhotoUrl('', '', '')