Javascript 功能运行不正常
由于某些原因,在node.js中,代码没有按顺序运行。在从function2检索数据之前,它正在运行console.log(data2)。 我假设这是因为node.js是异步运行的。然而,我不太确定如何修复它。 提前谢谢你的帮助Javascript 功能运行不正常,javascript,node.js,Javascript,Node.js,由于某些原因,在node.js中,代码没有按顺序运行。在从function2检索数据之前,它正在运行console.log(data2)。 我假设这是因为node.js是异步运行的。然而,我不太确定如何修复它。 提前谢谢你的帮助 function function1(app){ app.post('/test', (req, res, next) => { const url = `url1`; request(url, function(error
function function1(app){
app.post('/test', (req, res, next) => {
const url = `url1`;
request(url, function(error, response, body) {
if(!error && response.statusCode == 200) {
var data = JSON.parse(body);
var data2 = function2(data.id);
console.log(data2); //undefined
res.send(profileData);
}
});
})
}
function function2(id){
const url = `url2/${id}`;
request(url, function(error, response, body) {
if(!error && response.statusCode == 200) {
var data = JSON.parse(body);
console.log(data); //output correct data
return data;
}
});
}
因为您正在输出
console.log(data2)
之前调用function2()。后者立即执行,而前者必须发出服务器请求。将data2
传递给function2()
,并在从function2()输出结果后将其输出
看:你说得对。因为它是异步工作的,所以它实际上是按顺序运行的,不需要等待函数2的响应。Node.js只需调用function2并继续,如果希望它等待或使用来自异步调用的数据,则应使用承诺(async/await或then)或回调。看到上面的评论,我还建议您看看Promise.all.Bit,这是一个错误的概念,节点是异步运行的…这是您使用的特定请求方法,doI得到一个错误“wait仅在异步函数中有效”,甚至我在函数后面加上了async
function function1(app){
app.post('/test', (req, res, next) => {
const url = `url1`;
request(url, function(error, response, body) {
if(!error && response.statusCode == 200) {
var data = JSON.parse(body);
var data2 = function2(data.id, data2);
res.send(profileData);
}
});
})
}
function function2(id, data2){
const url = `url2/${id}`;
request(url, function(error, response, body) {
if(!error && response.statusCode == 200) {
var data = JSON.parse(body);
console.log(data); //output correct data
console.log(data2); //undefined
return data;
}
});
}
function function1(app){
app.post('/test', (req, res, next) => {
const url = `url1`;
request(url, async function(error, response, body) {
if(!error && response.statusCode == 200) {
var data = JSON.parse(body);
var data2 = await function2(data.id);
console.log(data2); //undefined
res.send(profileData);
}
});
})
}
function function2(id) {
const url = `url2/${id}`;
return new Promise(function (resolve, reject) {
request(url, function(error, response, body) {
if(!error && response.statusCode == 200) {
resolve(JSON.parse(body));
} else {
reject(error);
}
});
});
}