通过JavaScript的请求方法保存值

通过JavaScript的请求方法保存值,javascript,node.js,request,Javascript,Node.js,Request,我在javascript中尝试使用请求方法时遇到了一个问题,我无法保存值。我将运行一段代码,如: 让萨维达; 请求{ url:url, json:true },函数错误,响应,主体{ 如果出错{ 回来 } savedData=body.data; }; console.logsavedData 您需要在请求函数的回调中完成其余代码,或者使用承诺。在SavedData出现之前,将执行该回调之外的任何操作。您需要在请求函数的回调中执行其余代码,或者使用承诺。该回调之外的任何内容都将在SavedDa

我在javascript中尝试使用请求方法时遇到了一个问题,我无法保存值。我将运行一段代码,如:

让萨维达; 请求{ url:url, json:true },函数错误,响应,主体{ 如果出错{ 回来 } savedData=body.data; };
console.logsavedData 您需要在请求函数的回调中完成其余代码,或者使用承诺。在SavedData出现之前,将执行该回调之外的任何操作。

您需要在请求函数的回调中执行其余代码,或者使用承诺。该回调之外的任何内容都将在SavedData出现之前执行。

您的代码工作正常,只是忽略了一个事实,即作为请求的第二个参数提供的回调是异步执行的

在执行console.log时,网络请求可能已成功返回值,也可能尚未成功返回值

进一步解释 它声明函数调用采用以下签名

request(options, callback); 
在JavaScript中,回调的执行方式与名称完全相同;它在完成它首先需要做的事情之后,通过执行提供的函数进行回调

这种异步行为在进行网络请求时尤其突出,因为您不希望程序冻结并等待网络请求检索或发送您所请求的内容

实例 输出

运行一些异步代码! 你好我被调用,因为我是下一行代码;回拨电话呢 当它准备好时将被调用。 我完成了异步工作! 就像我答应的那样给你回电话。 您的代码工作正常,只是忽略了一个事实,即作为请求的第二个参数提供的回调是异步执行的

在执行console.log时,网络请求可能已成功返回值,也可能尚未成功返回值

进一步解释 它声明函数调用采用以下签名

request(options, callback); 
在JavaScript中,回调的执行方式与名称完全相同;它在完成它首先需要做的事情之后,通过执行提供的函数进行回调

这种异步行为在进行网络请求时尤其突出,因为您不希望程序冻结并等待网络请求检索或发送您所请求的内容

实例 输出

运行一些异步代码! 你好我被调用,因为我是下一行代码;回拨电话呢 当它准备好时将被调用。 我完成了异步工作! 就像我答应的那样给你回电话。
不确定您是否理解JS中承诺的概念。查看这个库,并阅读JS承诺是什么以及它是如何工作的。这应该可以帮助您更好地理解您的问题。不确定您是否理解JS中承诺的概念。查看这个库,并阅读JS承诺是什么以及它是如何工作的。这会帮助你更好地理解你的问题。所以我不认为我能在回调中做所有的事情,不可能写一个。那么在这种情况下,对吗?我需要写一个承诺?要这样做,你必须在回调中执行其余的代码,这是一个非常好的方法。。。回调本身甚至可以是一个包含请求函数后面的代码的函数。但是是的,.then也可以工作,但是您的其余代码将进入then块,如果您需要数据才能工作,那么您仍然无法在请求后运行任何代码。@zbnrg请查看我的答案,了解将回调拆分为单独回调的解释。我想这就是你要找的!我只是想知道,因为我需要两次调用请求,所以我想将每个值保存在一个数组中,因为我需要获取每个值的值并将其添加到字符串中,然后将其返回给方法一次,而不是两次。所以我不认为在这里只使用回调就行了?所以我不认为我可以在回调中做所有的事情,不可能写一个。那么在这种情况下,对吗?我需要写一个承诺?要这样做,你必须在回调中执行其余的代码,这是一个非常好的方法。。。回调本身甚至可以是一个包含请求函数后面的代码的函数。但是是的,.then也可以工作,但是您的其余代码将进入then块,如果您需要数据才能工作,那么您仍然无法在请求后运行任何代码。@zbnrg请查看我的答案,了解将回调拆分为单独回调的解释。我想这就是你要找的!我只是想知道,因为我需要调用两次请求,所以我想将每个值保存在一个数组中,beca 然后我需要获取每个的值并将其添加到字符串中,然后将其返回给方法一次,而不是两次。所以我不认为在这里只使用回调就行了?