等待定义变量?
Waiting for variables to be defined?
我是 JS 新手,我正在尝试制作一个 API 向其他网站发出一些请求,然后在 ejs 模板中呈现数据。
我有一些函数可以发出请求,但是当我尝试访问结果时,我得到的变量未定义。
这是我的代码:
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
request(options_breakout, callback_breakout);
request(options_vendor, callback_vendor);
res.render('report',{
breakout_result,
vendor_result
})
错误:
(node:2224) UnhandledPromiseRejectionWarning: ReferenceError: breakout_result is not defined
将 breakout_result 和 vendor_result 设为全局。
像这样:
var breakout_result, vendor_result;
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
request(options_breakout, callback_breakout);
request(options_vendor, callback_vendor);
res.render('report',{
breakout_result,
vendor_result
})
第一种方式是setInterval
::
var breakout_result = null;
var vendor_result = null;
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
request(options_breakout, callback_breakout);
request(options_vendor, callback_vendor);
var interval = setInterval(function() {
if ( breakout_result !== null && vendor_result !== null ) {
clearInterval(interval);
res.render('report',{
breakout_result,
vendor_result
});
}
}, 500);
第二种方式是使用callback
::
var breakout_result = null;
var vendor_result = null;
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
// init request1
request(options_breakout, function() {
callback_breakout(); // process request1
// init request2
request(options_vendor, function() {
callback_vendor(); // process request2
// now render content
res.render('report',{
breakout_result,
vendor_result
});
});
});
在breakout_result前面使用var或let。但是如果你在一个函数中声明一个变量
你不能在函数外使用它
所以如果你在不同的地方需要这个变量,比如
res.render('report',{
breakout_result,
vendor_result
})
你应该在函数外声明变量(全局范围)
像那样
var breakout_result;
var vendor_result;
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
request(options_breakout, callback_breakout);
request(options_vendor, callback_vendor);
res.render('report',{
breakout_result,
vendor_result
})
我是 JS 新手,我正在尝试制作一个 API 向其他网站发出一些请求,然后在 ejs 模板中呈现数据。
我有一些函数可以发出请求,但是当我尝试访问结果时,我得到的变量未定义。
这是我的代码:
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
request(options_breakout, callback_breakout);
request(options_vendor, callback_vendor);
res.render('report',{
breakout_result,
vendor_result
})
错误:
(node:2224) UnhandledPromiseRejectionWarning: ReferenceError: breakout_result is not defined
将 breakout_result 和 vendor_result 设为全局。
像这样:
var breakout_result, vendor_result;
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
request(options_breakout, callback_breakout);
request(options_vendor, callback_vendor);
res.render('report',{
breakout_result,
vendor_result
})
第一种方式是setInterval
::
var breakout_result = null;
var vendor_result = null;
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
request(options_breakout, callback_breakout);
request(options_vendor, callback_vendor);
var interval = setInterval(function() {
if ( breakout_result !== null && vendor_result !== null ) {
clearInterval(interval);
res.render('report',{
breakout_result,
vendor_result
});
}
}, 500);
第二种方式是使用callback
::
var breakout_result = null;
var vendor_result = null;
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
// init request1
request(options_breakout, function() {
callback_breakout(); // process request1
// init request2
request(options_vendor, function() {
callback_vendor(); // process request2
// now render content
res.render('report',{
breakout_result,
vendor_result
});
});
});
在breakout_result前面使用var或let。但是如果你在一个函数中声明一个变量 你不能在函数外使用它 所以如果你在不同的地方需要这个变量,比如
res.render('report',{
breakout_result,
vendor_result
})
你应该在函数外声明变量(全局范围) 像那样
var breakout_result;
var vendor_result;
function callback_breakout(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
breakout_result = data.result
console.log(breakout_result)
}
}
function callback_vendor(error, response, body) {
if (!error && response.statusCode == 200) {
// console.log(body);
var data = JSON.parse(body)
vendor_result = data.result
console.log(vendor_result)
}
}
request(options_breakout, callback_breakout);
request(options_vendor, callback_vendor);
res.render('report',{
breakout_result,
vendor_result
})