【问题标题】:request http client call and variable scope请求 http 客户端调用和变量范围
【发布时间】:2019-03-11 19:28:25
【问题描述】:

在良好的云函数环境中,在 request1 调用中,我可以得到 bodydayOfTheWeek 的输出。

但在 request1 调用之外,我得到未定义的输出。

我不知道为什么。即使 let 变量 bodydayOfTheWeek 是在 request1 调用之外声明的。

所以不确定范围变量在请求调用中是如何工作的

const request1 = require('request');  
const url = 'http://worldclockapi.com/api/json/pst/now';
let bodydayOfTheWeek: any;
request1(url, { json: true }, (err: any, res: any, body: any) => {
  if (err) { return console.log(err); }


  console.log('inside day of the week');
  bodydayOfTheWeek = body.dayOfTheWeek;
  console.log(bodydayOfTheWeek); <-- works
});

console.log('outside day of the week');
console.log(bodydayOfTheWeek);  <-- undefined

【问题讨论】:

    标签: node.js typescript request google-cloud-functions httpclient


    【解决方案1】:

    (err: any, res: any, body: any) =&gt; { } 是异步的。因此,bodydayOfTheWeek 将在函数外部未定义,除非您通过回调/承诺获得 body.dayOfTheWeek。阅读更多,https://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

    const request = require('request');  
    const url = 'http://worldclockapi.com/api/json/pst/now';
    
    // Callback
    function getDay(callback) {
        request(url, { json: true }, (err: any, res: any, body: any) => {
            if (err) {
                return callback(err);
            }
    
            callback(null, body.dayOfTheWeek);
        });
    }
    
    getDay((err, data) => {
        console.log(data);
    });
    
    
    // Promise
    function getDay() {
        return new Promise((resolve, reject) => {
            request(url, { json: true }, (err: any, res: any, body: any) => {
                if (err) {
                    return reject(err);
                }
    
                resolve(body.dayOfTheWeek);
            });
        });
    }
    
    
    getDa().then((data) => {
        console.log(data);
    });
    

    【讨论】:

    • 感谢您的帮助。如何在 Http 触发器的谷歌云函数中编写此承诺代码。我在任何地方都找不到一个简单的例子。
    • 根据节点版本,原生 Promise 应该可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2020-02-25
    • 2019-07-19
    相关资源
    最近更新 更多