相关疑难解决方法(0)

了解产量/生成器的代码流

我已经阅读了几个使用JavaScript生成器的代码示例,例如这个.我能想到的最简单的生成器使用块是这样的:

function read(path) {
    return function (done) {
        fs.readFile(path, "file", done);
    }
}

co(function *() {
    console.log( yield read("file") );
})();
Run Code Online (Sandbox Code Playgroud)

这确实打印出了内容file,但我的挂断是在哪里done调用.看起来,yield是一个语法糖,用于包装它在回调中返回的内容并适当地分配结果值(至少在co将错误参数抛给回调的情况下).我对语法的理解是否正确?

使用done时看起来像什么yield

javascript yield generator node.js co

5
推荐指数
1
解决办法
1881
查看次数

当ES6已经有生成器时,为什么ES2017会引入async/await?

在阅读async和时await,我注意到它几乎相当于发电机功能.考虑来自TypeScript Deep Dive的这个片段:

异步等待

(......)

// Not actual code. A thought experiment
async function foo() {
    try {
        var val = await getMeAPromise();
        console.log(val);
    }
    catch(err) {
        console.log('Error: ', err.message);
    }
}
Run Code Online (Sandbox Code Playgroud)

(......)

生成的JavaScript

你不必理解这一点,但如果你已经阅读了生成器,那就相当简单了.该功能foo可以简单地包装如下:

const foo = wrapToReturnPromise(function* () {
    try {
        var val = yield getMeAPromise();
        console.log(val);
    }
    catch(err) {
        console.log('Error: ', err.message);
    }
});
Run Code Online (Sandbox Code Playgroud)

wrapToReturnPromise刚刚执行生成函数来获取generator,然后使用generator.next()如果该值是,promise它会then+ catch的承诺,并根据结果调用genertor.next(result)或 …

javascript language-design generator async-await ecmascript-2017

3
推荐指数
1
解决办法
563
查看次数