Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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 如何等待module.export函数完成请求,然后将其返回值分配给不同JS文件中的变量_Javascript_Node.js_Promise_Async Await_Xmlhttprequest - Fatal编程技术网

Javascript 如何等待module.export函数完成请求,然后将其返回值分配给不同JS文件中的变量

Javascript 如何等待module.export函数完成请求,然后将其返回值分配给不同JS文件中的变量,javascript,node.js,promise,async-await,xmlhttprequest,Javascript,Node.js,Promise,Async Await,Xmlhttprequest,我在Node.JS应用程序中运行了两个JS文件 在latlng.js中,我有以下代码: async function getPlaceDetails(input) { var locationUrl = 'https://www.google.com'; request(locationUrl, (error, response, body) => { if (!error && response.statusCode == 200) { l

我在Node.JS应用程序中运行了两个JS文件

在latlng.js中,我有以下代码:

async function getPlaceDetails(input) {

  var locationUrl = 'https://www.google.com';

  request(locationUrl, (error, response, body) => {
    if (!error && response.statusCode == 200) {
      let location_json = JSON.parse(body);
      let placeDetails = {
        lat: location_json.candidates[0].geometry.location.lat,
        lng: location_json.candidates[0].geometry.location.lng,
        name: location_json.candidates[0].name,
      }

      return placeDetails;
    }
    else {
      console.log("Error "+response.statusCode);
    }
  });
}

module.exports.getPlaceDetails = getPlaceDetails;
我正在从latlng.js导出函数getPlaceDetails(),以便在app.js中使用它,请参见此处:

var place = require('./latlng');

async function firstFunction(input){
    let data = await place.getPlaceDetails(input);
    return data;
};

async function secondFunction(input){
    let data = await firstFunction(input);
    // now wait for firstFunction to finish...
    console.log(data);
};

secondFunction('museum of modern art');

这对我来说是未定义的。我今天已经搜索了几个小时,以获取其他未定义或承诺{undefined}的内容,但没有成功…

您的
getPlaceDetails
函数是基于回调的,当您在没有回调的情况下等待它时,不会立即返回任何有用的内容。相反,您可以“允诺”它以适应
async/await
模式:

async function getPlaceDetails(input) {

 return new Promise((resolve, reject) => {
    var locationUrl = 'https://www.google.com';

    request(locationUrl, (error, response, body) => {
      if (!error && response.statusCode == 200) {
        let location_json = JSON.parse(body);
        let placeDetails = {
          lat: location_json.candidates[0].geometry.location.lat,
          lng: location_json.candidates[0].geometry.location.lng,
          name: location_json.candidates[0].name,
        }

        resolve(placeDetails);
      }
      else {
        console.log("Error "+response.statusCode);
        reject(new Error('something meaningful here'));
      }
    });
  });
}

module.exports.getPlaceDetails = getPlaceDetails;


“module.exports=getPlaceDetails;”。。。导出
request
不返回承诺是正确的,因此将
getPlaceDetails
转换为
async
没有任何帮助。改用请求承诺包。非常感谢@jakemingolla这一个做到了!然而,我并不真正理解“Promisify”函数的作用。你能更详细地解释一下发生了什么吗?看看哪本书有一个相当不错的概述,再加上一个将来应用的编程方法!非常感谢你!