首页 > 解决方案 > 从异步函数中提取值

问题描述

我正在使用我们的套接字并且我有很多请求,所以我认为最好将数据从异步函数中提取出来并将其放入它之外的变量中。我的代码看起来像这样,但我只是收到请求 [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);

关于如何实现目标的任何想法?

标签: node.jsasynchronous

解决方案


将您的 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);
}

推荐阅读