javascript - Node JS 从 url 获取 JSON 在其余代码之后执行

标签 javascript node.js asynchronous

我想从我的 Node JS 代码中的 URL 获取 JSON。代码工作正常,但由于执行的异步性质,执行顺序困惑。

var http = require("https");

var number = 37302;

// these functions need to execute is sequence.    

console.log('Before API Call');

var response = fetchJson(number);
console.log(response);

console.log('After API Call');  



function fetchJson(number)
{        

    var url = 'https://example.com/api/getactionitems/' + number;

    http.get(url, function(res){
        var body = ''; 

        res.on('data', function(chunk){
            body += chunk; 
            console.log('JSON Retrieved.');               
        });

        res.on('end', function(){

            console.log('Parsing JSON');

            var APIResponse = JSON.parse(body);

            var Name = APIResponse.EmpName;
            var outstring = APIResponse.ActionItem;                
            return ('Hi ' + Name + ', Your action Items are: '+ outstring);            
        });
    })
    .on('error', function(e){
      return ("Got an error while fetching data.");
    });

}

该代码执行时,输出字符串的顺序如下:

Before API Call
undefined
After API Call
JSON Retrieved.
Parsing JSON

如何更正执行顺序,使顺序如下:

Before API Call
JSON Retrieved.
Parsing JSON
<Outpt from the JSON parsing>
After API Call

最佳答案

var http = require("https");

var number = 37302;

// these functions need to execute is sequence.    


console.log('Before API Call');

fetchJson(number).then(function(res){

console.log(res);

console.log('After API Call');
}).catch(function(e){console.log('err',e)});



function fetchJson(number)
{        
return new Promise(function(resolve,reject){
    var url = 'https://example.com/api/getactionitems/' + number;

    http.get(url, function(res){
        var body = ''; 

        res.on('data', function(chunk){
            body += chunk; 
            console.log('JSON Retrieved.');               
        });

        res.on('end', function(){

            console.log('Parsing JSON');

            var APIResponse = JSON.parse(body);

            var Name = APIResponse.EmpName;
            var outstring = APIResponse.ActionItem;                
            resolve('Hi ' + Name + ', Your action Items are: '+ outstring);            
        });
    })
    .on('error', function(e){
      reject("Got an error while fetching data.");
    });
});

}

关于javascript - Node JS 从 url 获取 JSON 在其余代码之后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59232963/

相关文章:

javascript - 如何使用javascript从另一个页面(同域)的内容中获取信息?

javascript - 带解构的可选参数对象

c# - Entity Framework 6 异步方法与同步方法的性能

node.js - 如何根据数组字段的长度对文档进行排序

c# - 如果中间发生页面更改,AJAX 请求/响应的数据会发生什么情况

javascript - 在 ajax 回调函数的每个循环之后附加输出

javascript - 处理和解析 json 数据到 React 组件

javascript - forEach 循环内的 Promise

node.js - 增加 nginx 上的缓冲区超时大小

javascript - Node.js:使用 EventEmitter 和 Express 4.x 进行长轮询 |捕获请求关闭