提问人:Dingredient 提问时间:8/8/2017 更新时间:11/22/2023 访问量:8909
如何在同步nodejs函数中等待promise?
How to wait for promise in synchronous nodejs function?
问:
我使用异步方法创建了一个包含用户凭据的解密文件:
initUsers(){
// decrypt users file
var fs = require('fs');
var unzipper = require('unzipper');
unzipper.Open.file('encrypted.zip')
.then((d) => {
return new Promise((resolve,reject) => {
d.files[0].stream('secret_password')
.pipe(fs.createWriteStream('testusers.json'))
.on('finish',() => {
resolve('testusers.json');
});
});
})
.then(() => {
this.users = require('./testusers');
});
},
我从同步方法调用该函数。然后我需要等待它完成,然后同步方法才能继续。
doSomething(){
if(!this.users){
this.initUsers();
}
console.log('the users password is: ' + this.users.sample.pword);
}
在完成之前执行。我怎样才能让它等待?console.log
this.initUsers();
答:
0赞
marvel308
8/8/2017
#1
你必须这样做
doSomething(){
if(!this.users){
this.initUsers().then(function(){
console.log('the users password is: ' + this.users.sample.pword);
});
}
}
你不能同步等待异步函数,你也可以尝试 async/await
async function doSomething(){
if(!this.users){
await this.initUsers()
console.log('the users password is: ' + this.users.sample.pword);
}
}
评论
this.initUsers().then...
.then()