我正在使用我们的套接字,并且有很多请求,因此我认为最好将数据从异步函数中提取出来,并将其放入其外部的变量中。我的代码看起来像这样,但是我只收到请求[Pending]:
var variable;
var Request = require("request");
function getAsyncValue() {
return new Promise((resolve, reject) => {
Request.get(url, (error, response, body) => {
if(error) {
return reject(err);
}
var object = JSON.parse(body);
var value = object.data.available_balance;
resolve(value);
});
});
}
async function asyncWrapper() {
variable = await getAsyncValue();
return(variable);
}
printVariable = asyncWrapper();
console.log(printVariable);
关于如何实现目标的任何想法?
答案 0 :(得分:0)
将您的console.log放入asyncWrapper()中,如下所示:
async function asyncWrapper() {
variable = await getAsyncValue();
console.log(printVariable);
return(variable);
}
printVariable = asyncWrapper();
之所以这样做,是因为当您在asyncWrapper()之后有console.log()时,将立即调用它,而不会像您需要的那样以同步方式进行调用。
或者您可以执行以下操作:
只需将asyncWrapper函数调用包装在另一个异步方法中,然后在其中等待asynWrapper()的结果。看下面:
var function1 = async function () {
printVariable = await asyncWrapper();
console.log(printVariable);
}
答案 1 :(得分:0)
您的asyncWrapper是一个承诺。您必须使用等待。
要使用等待,您需要一个异步功能。因此,您可以使用IIFE(立即调用函数表达式)异步函数。
async function(){
printVariable = await asyncWrapper();
console.log(printVariable);
}();
答案 2 :(得分:0)
这就是我想要的:
var request = require('sync-request');
var returnCode;
var getUrl = "url";
returnCode = httpGet(getUrl);
var object = JSON.parse(returnCode);
var balance = objekt.data.available_balance;
console.log(balance);
function httpGet(url){
var response = request(
'GET',
url
);
return response.body;
}