【发布时间】:2018-05-07 19:14:15
【问题描述】:
我正在尝试使用生成器来执行异步操作(readdir)并打印结果。
这是我的代码:
var dirname = //some directory name;
function *gen(done) {
let exercises = yield fs.readdir(dirname, done);
console.log(exercises);
}
let G = gen(function(err, res) {
G.next(res);
})
G.next();
这工作并打印 ['README.md', 'sol.js']
据我所知,对于异步操作,将生成器与 Promise 结合起来会更好(信任问题)。这是真的吗,还是我误会了?
因此,我尝试将 Promise 与生成器结合起来。我用的是凯尔辛普森的Asynquence library。
const fs = require('fs');
const ASQ = require('asynquence-contrib');
function readDirectory(dir) {
return ASQ(function(done){
fs.readdir(dir,done);
});
}
function *genProm() {
let exercises = yield readDirectory(dirname);
console.log(exercises);
}
ASQ().runner(genProm);
现在,结果是 [空,['README.md','sol.js']]
我的问题是:
- 为什么这里的结果不同? null 来自哪里?我该如何摆脱它?
- 在这里结合 Promise 和生成器有意义吗?
【问题讨论】:
-
"我尝试将 Promise 与生成器结合使用" - 不要。这就是 2015 年。这是一个与 ES6 配合使用的 hack。今天你应该使用
async/await语法。
标签: javascript asynchronous promise generator es6-promise