Node.js асинхронный метод pomise возвращает неопределенное значение - PullRequest
0 голосов
/ 13 мая 2019

Я создал приложение node.js, используя обещание.У меня следующий код

async clientCall() {

    const baseUrl = 'https://localhost:44300/test';
    const queryString = '';
    var options = {
        uri: baseUrl + queryString,
    };
    process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
    var result =  await request.get(options, function (err: any, res: any, body: any) {
        console.log("Result: ", body)
        return body;
    })

     console.log("response:",result);
    // return result;
}

await ClientRepository.clientCall().then(data => {

    console.log("inside data: ",data)

    return data;
})

Но я получил вывод, подобный этому

response:
Result: My response
inside data: undefined
inside data: My response

Мне нужно возвращать ответ только после завершения запроса на ожидание.

1 Ответ

1 голос
/ 13 мая 2019

Я думаю, что следующее ваше решение.Если Обещание передается в выражение ожидания, оно ожидает выполнения Обещания и возвращает выполненное значение.

async function clientCall() {
    return new Promisse((resolve, reject) => {
        const baseUrl = 'https://localhost:44300/test';
        const queryString = '';
        var options = {
            uri: baseUrl + queryString,
        };
        process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
        request.get(options, function (err: any, res: any, body: any) {
            resolve(body);
        })
    });
}

async function callClientCall(){
    let clientCallResult = await ClientRepository.clientCall();
}

Простой пример:

function resolveAfter2Seconds(x) { 
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

async function f1() {
  var x = await resolveAfter2Seconds(10);
  console.log(x); // 10
}
f1();
...