Получение значения из функции асинхронного - PullRequest
0 голосов
/ 16 декабря 2018

Я работаю с нашими сокетами и у меня много запросов, поэтому я решил, что было бы лучше вытащить данные из функции асинхронности и поместить их в переменную вне ее.Мой код выглядит следующим образом, но я просто получаю запрос [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 голосов
/ 16 декабря 2018

Ваш asyncWrapper - это обещание.Вы должны использовать ждать.

Чтобы использовать ожидание, вам нужна асинхронная функция.Таким образом, вы можете использовать асинхронную функцию IIFE (выражения для немедленного вызова функций).

async function(){
    printVariable = await asyncWrapper();
    console.log(printVariable);
}();
0 голосов
/ 17 декабря 2018

Это было то, что я искал:

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;
}
0 голосов
/ 16 декабря 2018

поместите ваш console.log в asyncWrapper () следующим образом:

 async function asyncWrapper() { 
     variable = await getAsyncValue(); 
     console.log(printVariable); 
     return(variable); 
 } 

 printVariable = asyncWrapper();

причина этого заключается в том, что когда у вас был console.log () после asyncWrapper (), он будет вызыватьсянемедленно и не синхронизировано, как вам потребуется.

или вы можете сделать следующее:

Просто оберните вызов функции asyncWrapper внутри другого асинхронного метода и дождитесь результата asynWrapper () в этом.Смотрите ниже:

var function1 = async function () {
    printVariable = await asyncWrapper();
    console.log(printVariable);
}
...