节点js值返回

时间:2018-02-22 11:55:17

标签: javascript node.js asynchronous

我是节点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
}

2 个答案:

答案 0 :(得分:0)

您必须向任务1添加一个回调函数,该函数将在完成后调用:

function Task1(callback){  //2 --> Executing task1  
   ....
   callback(result); //get the result this way
};

然后当你像这样打电话时

Task1(function(result){
      Task2(result);
});

这是一种非常通用的方法。检查这一点以了解有关该主题的更多信息:

Node.js event-driven

答案 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
})