在 hapi.js 的处理函数中使用 async/await 到 return 数据

Using async/await to return data in hapi.js's handler function

我想从我的处理程序函数中 return dataSet。但是它嵌套在我的承诺链中。我正在尝试使用 await/async 但数据的值仍未定义。关于如何做到这一点的想法?

handler: (request, h) => {

    let data: any;
    connection.connect((err) => {
        if (err) {
            console.error("Error-------> " + err);
        }
        console.log("Connected as id " + connection.threadId);
        connector.getAllEvents()
            .then(async dataSet => {
                console.log(dataSet);
                data = await dataSet;
            });
    });
    return data;
}

没有抛出错误,因为登录到控制台会打印出我正在寻找的值。

为此,您需要将 handler return 设为 Promise,并在处理程序中用 [=12] 包裹 connection.connect 块=].

例如

handler: (request, h) => {
    // wrap connector.connect(...) in a Promise
    return Promise<any>((resolve, reject) => {
        connection.connect(err => {
           if (err) {
               console.error("Error -----> ", err);

               // error in connection, propagate error via reject
               // and do not continue processing
               return reject(err);
           }

           console.log("Connected as id " + connection.threadId);
           connector.getAllEvents()
               // don't think you need this to be async
               // as connector.getAllEvents() will should return a Promise<T>
               // and .then() is like a .map() so its first argument is a T
               // rather than a Promise<T> 
               .then(dataSet => {
                   console.log(dataSet);

                   // we finally have our value
                   // so we propagate it via resolve()
                   resolve(dataSet);
               });
        });
    });
}

当您 return 数据未初始化时。您可以通过在 return 之前添加另一个日志语句来测试它,您会看到它在 console.log(dataSet);

之前打印

我不知道 connection.connect return 是什么(它是什么框架?),但你可以承诺它。然后你 return 对 "connect and get the data" 的承诺并让调用者等待它,或者你 await 在你的函数中 return 承诺完成后的数据。