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