如何在JavaScript中两次生成不同的函数?

如何在JavaScript中两次生成不同的函数?,javascript,generator,indexeddb,ecmascript-harmony,ecmascript-6,Javascript,Generator,Indexeddb,Ecmascript Harmony,Ecmascript 6,所以我的代码是“让我们使用生成器来避免回调地狱”类型。我试图让一个访问器函数包装一个处理打开IndexedDB的生成器。我需要让生成器屈服于“回调”,然后屈服于访问器函数,以便访问器函数可以返回在生成器中创建的对象。也许这是一个愚蠢的想法,但我不知道如何在不轮询布尔值的情况下做到这一点(例如idb_ready=false;在开始while(gen.next())业务之前等待idb_ready为true) 代码: 有没有办法不用投票就能做到这一点?谢谢 不,生成器不会产生同步结果。只有生成器中的“

所以我的代码是“让我们使用生成器来避免回调地狱”类型。我试图让一个访问器函数包装一个处理打开IndexedDB的生成器。我需要让生成器屈服于“回调”,然后屈服于访问器函数,以便访问器函数可以返回在生成器中创建的对象。也许这是一个愚蠢的想法,但我不知道如何在不轮询布尔值的情况下做到这一点(例如idb_ready=false;在开始while(gen.next())业务之前等待idb_ready为true)

代码:


有没有办法不用投票就能做到这一点?谢谢

不,生成器不会产生同步结果。只有生成器中的“同步”代码(当使用适当的函数时,如
co
库或其他什么)可能更符合您的要求。方便链接异步事件:
accessor = function() {
    var gen = function* () {
        var ret = {};
        var request = indexedDB.open("blah", 1, "description");
        request.onupgradeneeded = resume;

        var event = yield;

        ret.db_instance = event.target.result;

        yield ret;
    };

    function resume(val) { gen.next(val); }

    gen.next(); // start the generator

    // HERE is where I need to wait for the second yield
}