在 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 承诺完成后的数据。
我想从我的处理程序函数中 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 承诺完成后的数据。