繁体   English   中英

https.request在回调下不起作用-nodeJS

[英]https.request doesn't work under callback - nodeJS

我正在使用https库调用Google API。 当作为独立函数调用时,它可以完美工作,但在async.waterfallasync.waterfall

我敢肯定,我做错了什么。 如果您能指出我的错误,那就太好了。 这是代码段:

我也没有看到任何错误。 它只是退出程序。 我在做async什么问题吗?

 async.waterfall([
  (callback) => {
    console.log("In the first callback");

    const options = {
      host: 'www.googleapis.com',
      path: `/oauth2/v4/token?code=${authorizationCode}&client_id=${clientId}&client_secret=${clientSecret}&redirect_uri=${redirectUri}&grant_type=${grantType}`,
      port: 443,
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    };

    const req = https.request(options, (res) => {
      console.log("Inside Request - response came");
      console.log(`statusCode changed: ${res.statusCode}`);

      let geoData = [];
      res.on('data', (d) => {
        geoData.push(d);
      });

      res.on('end', () => {
        try {
          geoData = JSON.parse(Buffer.concat(geoData).toString());
          console.log(geoData);

          const response = {
            statusCode: res.statusCode,
            body: JSON.stringify(geoData),
          };

          return callback(null, response);
        } catch (error) {
          return callback(error);
        }
      });
    });

    req.on('error', (e) => {
      return callback(e.message);
    });

    req.end();

    console.log("End of first callback");
  }
], (err, result) => {
    if (err) {
      return err;
    }
    return result;
});

提前致谢。

由于NodeJ的异步类型以及编写函数的方式, req.end()在响应到达之前req.end()执行。 req.end() req.on(...)res.on() 您只希望在收到响应或错误后结束请求。 此外,您应该在res.on('data') return callback()内添加return callback()以便通知异步函数已完成执行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM