尽pipe使用await关键字,返回promise的方法还没有完全执行?

我是JavaScript新手,积极学习。 我正在调用一个方法,它使用await关键字从ES2016类的asynchronous方法中返回一个promise:

export default class MyClass extends Model { async getReport() { const value = await xlsx.save(await this._getReportFileName()); console.log('await keyword returned method value'); console.log(`The value is: ${value}`); return true; } } 

任何人都可以发现为什么该方法执行之前有机会执行其逻辑,并在调用之前执行的原因。 await关键字似乎不等待实际返回的承诺,并且输出到控制台的值始终未定义。

Object xlsx是具有方法save的类File的一个实例:

 export default class File { save(filename, options) { writer.save(this, filename, options); } } 

这是调用保存帮助器方法的代码:

 function save(xlsx, filename, options) { return new Promise((resolve, reject) => { try { const stream = fs.createWriteStream(filename, options); const zip = archiver('zip'); stream.on('close', () => { console.log('Resolving promise'); resolve(); }); stream.on('error', (err) => { console.log('Rejecting promise'); reject(err); }); zip.pipe(stream); const file1 = 'fixtures/file1.txt'; const file2 = 'fixtures/file2.txt'; zip .append(fs.createReadStream(file1), { name: 'file1.txt' }) .append(fs.createReadStream(file2), { name: 'file2.txt' }) .finalize(); } catch (error) { console.log('Error when saving'); reject(error); } }); } 

难道是parsing()是不是甚至访问/在stream事件的侦听范围内可用? 如果是这样,一个人如何正确地解决一个承诺,同时听一个stream事件?

您的save(filename, options)传递方法不是asynchronous的,它不会从save(xlsx, filename, options)方法返回承诺。

尝试这个:

 export default class File { async save(filename, options) { await writer.save(this, filename, options); } } 

或这个:

 export default class File { save(filename, options) { return writer.save(this, filename, options); } }