1
我創建一個包含我的用戶憑證的解密文件,使用異步方法:如何在同步nodejs函數中等待承諾?
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();
完成之前執行。我怎樣才能讓它等待呢?
回報的承諾和'this.initUsers() 。然後...'? – Jorg
你不能「同步等待承諾」。返回一個承諾,調用者使用'.then()'來承諾知道何時完成。 – jfriend00
也許我在問錯誤的問題。而不是等待一個承諾,我可以突然擺脫諾言https://stackoverflow.com/questions/45571213/how-to-re-write-anync-function-to-be-synchronous –