相关疑难解决方法(0)

ECMA6发电机:产量承诺

据我了解,ECMA6生成器应该能够屈服于一个返回promise的函数,最终返回已解决/拒绝的函数.使代码读取更像同步代码,并避免回调地狱.

我正在使用带有--harmony的node.js v0.12.2和以下代码.

var someAsyncThing = function() {
  return new Promise(function(resolve, reject) {
    resolve("I'm Resolved!");
  });
};

someAsyncThing().then(function(res) {console.log(res);});
// Works as expected: logs I'm Resolved!

function* getPromise() {
    var x = yield someAsyncThing();
    console.log("x: " + x); // Fails x undefined
}

var y = getPromise();
console.log(y); // returns {}

console.log(y.next());
// Fails: logs { value: {}, done: false }
Run Code Online (Sandbox Code Playgroud)

我的代码基于我能够在网上找到的几个例子.我究竟做错了什么?

javascript node.js ecmascript-6

8
推荐指数
2
解决办法
6745
查看次数

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

我已经阅读了几个使用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
查看次数

在javascript中产生承诺会发生什么?

没找到完整的答案..

承诺产生后会发生什么?

就是这样的建筑

var p = new Promise()
p.resolve(value)

function * (){
  yield p
}
Run Code Online (Sandbox Code Playgroud)

相当于

function * (){
  yield value
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

如何混合不同风格的异步编程,例如像koa这样的框架?

Koa中间件正在使用生成器,但是有很多好的包是基于promise的(例如,sequelize)

javascript yield promise koa

5
推荐指数
2
解决办法
482
查看次数

标签 统计

javascript ×3

node.js ×2

yield ×2

co ×1

ecmascript-6 ×1

generator ×1

koa ×1

promise ×1