从异步函数中提取值

时间:2018-12-16 09:46:41

标签: node.js asynchronous

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

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

3 个答案:

答案 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;
}