Tia*_*olo 11 javascript node.js ecmascript-6 ecmascript-2017
我的函数解析了http服务器启动后立即解析的承诺.这是我的代码:
function start() {
return new Promise((resolve, reject) {
this.server = Http.createServer(app);
this.server.listen(port, () => {
resolve();
});
})
}
Run Code Online (Sandbox Code Playgroud)
如何将启动功能转换为异步/等待?
包括async
函数声明和之前await
的Promise
构造.虽然请注意,您实际上是在为现有模式添加代码.await
将值转换为a Promise
,尽管Question的代码已经使用了Promise
构造函数.
async function start() {
let promise = await new Promise((resolve, reject) => {
this.server = Http.createServer(app);
this.server.listen(port, () => {
resolve();
});
})
.catch(err => {throw err});
return promise
}
start()
.then(data => console.log(data))
.catch(err => console.error(err));
Run Code Online (Sandbox Code Playgroud)
创建new Promise
类似其他答案的建议表明在这种情况下可以正常工作,但是作为一般规则,util.promisify可以阻止您多次编写相同的内容。
因此,您可以改为执行以下操作:(node.js v8.0.0 +)
const util = require('util');
async function start() {
let server = Http.createServer(app);
await util.promisify(server.listen.bind(server))(port);
}
Run Code Online (Sandbox Code Playgroud)
util.promisify(some_function)
接受一个通常接受回调的函数,并返回此函数的新包装版本,而该版本将返回Promise。
有更多解释的步骤:
let server = Http.createServer(app);
// .bind() is needed so that .listen() keeps the correct `this` context when it is called.
// If your function does not require any specific context, leave off .bind()
let listen_promise = util.promisify(server.listen.bind(server));
await listen_promise(port);
Run Code Online (Sandbox Code Playgroud)
蓝鸟可以进行更高级的传播。
使用:
const doRequest = () => new Promise((resolve, reject) {
this.server = Http.createServer(app);
this.server.listen(port, () => {
resolve();
});
})
async function start() {
await doRequest()
}
Run Code Online (Sandbox Code Playgroud)
我相信,类似这样的事情。
归档时间: |
|
查看次数: |
10673 次 |
最近记录: |