在良好的云函数环境中,在request1调用中,我能够获得bodydayOfTheWeek的输出。
但是在request1调用之外,我得到的输出是未定义的。
我不知道为什么。即使在request1调用之外声明了let变量bodydayOfTheWeek。
所以不确定作用域变量在请求调用中是如何工作的
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发布于 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/
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);
});https://stackoverflow.com/questions/55109031
复制相似问题