我是节点js的初学者。尝试调用API和结果应该传递给另一个函数。由于回调功能,第二个函数[Task2()]在调用第一个函数[Task1()]后很快就会执行,我该如何处理节点js代码的这种异步行为。我用google搜索了产量,但没有成功。我提供了以下示例代码供您参考。请提供您的意见/建议。
var result='';
function Task1(){ //2 --> Executing task1
Task_Id='';
var options = {
uri: 'http://url/post', //url to call
method: 'POST',
auth: {
'user': 'user1',
'pass': 'paswd1'
},
json: {
"key":"value"
}
};
function get_createdtaskId(options,callback){
var res='';
request(options, function (error, response, body) {
var data=JSON.stringify(body);
var parsedResponse = JSON.parse(data);
if (!error && response.statusCode == 200) {
res = parsedResponse.TaskID;
}
else{
console.log(error);
res=error;
}
callback(res);
});
}
//to call
Task_Id= get_createdtaskId(options, function(resp){
return resp;
});
return Task_Id;
}
result=Task1(); //1 -->initial function calling
Task2(result){ //3 -->use result from task1 as input parameter for function Task2
//do logic on result received from Task1
}
答案 0 :(得分:0)
您必须向任务1添加一个回调函数,该函数将在完成后调用:
function Task1(callback){ //2 --> Executing task1
....
callback(result); //get the result this way
};
然后当你像这样打电话时
Task1(function(result){
Task2(result);
});
这是一种非常通用的方法。检查这一点以了解有关该主题的更多信息:
答案 1 :(得分:0)
您可以在Javascript中使用Promises来解决此问题。 例如:
Task1 = new Promise((resolve,reject)=>{
resolve("Success");
})
Task1.then(result=>{
//result is the return value from task 1
Task2(result);
}).catch(error=>{
//handle the error
})