Node.js中的Https请求

Node.js中的Https请求,node.js,httprequest,Node.js,Httprequest,我正在使用Node.js中的请求库执行https请求,以从另一个服务获取数据。这是异步调用的,对吗?所以我的代码在所有数据都存在之前一直在运行,对吗 我的问题是,事后需要数据来计算一些事情。我的代码在计算过程中抛出错误,因为服务中的数据未定义。。。 有可能数据还不存在吗?如果是这样,你会怎么做 这是请求的副本: const request = require('request'); request(someUrl, {"Accept": "application/json"}, (err, r

我正在使用Node.js中的请求库执行https请求,以从另一个服务获取数据。这是异步调用的,对吗?所以我的代码在所有数据都存在之前一直在运行,对吗

我的问题是,事后需要数据来计算一些事情。我的代码在计算过程中抛出错误,因为服务中的数据未定义。。。 有可能数据还不存在吗?如果是这样,你会怎么做

这是请求的副本:

const request = require('request');

request(someUrl, {"Accept": "application/json"}, (err, res, body) => {
    if (err)
        handleError(err);
    body = JSON.parse(body);
    return body;
});

这种情况在react/angular/vue类web应用程序中非常常见,有时您需要立即获取数据。但在Rest呼叫或其他事情之后,它就不可用了

那么,最简单的解决方案是什么?
只需添加一个检查,例如:

const calculate = (someVal)=>{
    if(!someVal) return ;
    //otherwise do the calculation
}
还有很多其他方法,主要是使计算异步。对于您的功能,您可以这样做

const promOp = function(){
    return new Promise((resolve, reject) => {
        request(someUrl, {"Accept": "application/json"}, (err, res, body) => {
            if (err) reject(err);
            body = JSON.parse(body);
            resolve(body);
        });
    }
}
//then
promOp()
.then((body)=>{
    //calculate here
})

//or can use the `Async/Await` syntax instead of then
const op = async () => {
    const body = await promOp;
    //calculate here
}
当你说“需要数据来计算一些事情”时,你指的是a)调用请求(…)后代码中的位置,还是b)回调函数中的位置?由于您使用的是回调函数b),因此结果(即主体)是唯一可用的位置-回调函数的返回值将被丢弃。a)。。。这是一个被调用的函数,它应该返回值。。。当我不想把我的代码弄乱,到处调用那个大代码时,有没有办法把它放在函数中呢?谢谢:)两个问题。。。为什么要将函数设为常量?为什么不把它们写成普通函数呢?为什么除了prompOp常量函数外,其他地方都使用箭头函数呢?1)如果不想使用,这两种函数语法基本上是可以互换的。也就是说,当您创建函数表达式时(就像我做的那样),只有在声明变量后才能访问函数。但是对于普通函数,即使您在脚本的底部创建函数,它也可以在顶部使用。2)没有特殊原因。您也可以在那里使用箭头功能。但是,由于没有作用域,这样和胖箭头函数没有自己的
这个
上下文,我想提供一个非全局的某种作用域。我下意识地这么做了,没有特别的原因对不起,我的回答很奇怪