首页 > 解决方案 > Node.js pomise 异步方法返回未定义

问题描述

我使用 Promise 创建了一个 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

只有在等待请求完成后,我才需要返回响应。

标签: node.jspromisegetasync-await

解决方案


我认为以下是您的解决方案。如果将 Promise 传递给 await 表达式,它会等待 Promise 完成并返回已完成的值。

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();

推荐阅读