首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请求http客户端调用和变量范围

请求http客户端调用和变量范围
EN

Stack Overflow用户
提问于 2019-03-12 03:28:26
回答 1查看 111关注 0票数 0

在良好的云函数环境中,在request1调用中,我能够获得bodydayOfTheWeek的输出。

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

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

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 03:49:35

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

代码语言:javascript
复制
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);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55109031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档