Javascript 发电机和承诺-尝试组合
我正在尝试使用生成器执行异步操作(readdir)并打印结果 这是我的密码:Javascript 发电机和承诺-尝试组合,javascript,asynchronous,promise,generator,es6-promise,Javascript,Asynchronous,Promise,Generator,Es6 Promise,我正在尝试使用生成器执行异步操作(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(); 它可以
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']
据我所知,对于异步操作,将生成器与承诺相结合更好(信任问题)。这是真的,还是我误解了
因此,我试图将承诺与发电机结合起来。我用了凯尔·辛普森的
现在,结果是
[null,['README.md','sol.js']]
我的问题是:
对不起,你们为什么需要发电机呢?为什么不使用异步/等待 大概是这样的:
const fs = require('fs');
const {promisify} = require('util');
const readDirectory = async dirname => await promisify(fs.readdir)(dirname);
readDirectory("someDir").then(...);
即使没有async/await,您也可以这样做:
const fs = require('fs');
const {promisify} = require('util');
const readDirectory = dirname => promisify(fs.readdir)(dirname);
readDirectory("someDir").then(...);
最后,正如@Patrick Roberts在评论中所建议的,您可以简单地使用:
const fs = require('fs');
const {promisify} = require('util');
const readDirectory = promisify(fs.readdir);
readDirectory("someDir").then(...);
从
async
函数中删除wait
,它是完全冗余的。是的,最后我将两者都删除了。请参阅第二个清单。如果要删除所有冗余,那么最好只执行const readDirectory=promisify(fs.readdir)
Right!:)唯一的问题是我想问题中的代码可能是一些更复杂代码的一部分。所以在最初更复杂的代码中,作者可能需要带参数的专用函数和异步/等待。2015年就是这样。这是一个使用ES6的黑客。今天,您应该使用async
/await
语法。
const fs = require('fs');
const {promisify} = require('util');
const readDirectory = promisify(fs.readdir);
readDirectory("someDir").then(...);