Javascript 发电机运行后继续运行的正确方法
我有以下发电机功能:Javascript 发电机运行后继续运行的正确方法,javascript,generator,promise,Javascript,Generator,Promise,我有以下发电机功能: BulkLoader.prototype.load = function(password) { var self = this; return async(function * () { try { self.users = yield getJSON('/users'); self.contacts = yield getJSON('/contacts'); self.companies = yield getJSO
BulkLoader.prototype.load = function(password) {
var self = this;
return async(function * () {
try {
self.users = yield getJSON('/users');
self.contacts = yield getJSON('/contacts');
self.companies = yield getJSON('/companies');
return self;
} catch (err) {
throw err;
}
});
};
asyc
方法如下所示,我从Q库中获取:
export default function async(generatorFunc) {
function continuer(verb, arg) {
var result;
try {
result = generator[verb](arg);
} catch (err) {
return RSVP.Promise.reject(err);
}
if (result.done) {
return result.value;
} else {
return RSVP.Promise.resolve(result.value).then(callback, errback);
}
}
var generator = generatorFunc();
var callback = continuer.bind(continuer, "next");
var errback = continuer.bind(continuer, "throw");
return callback();
}
我的呼叫代码如下所示:
var bulkLoader = new GeneratorBulkLoader();
bulkLoader.load()
.then(render)
.catch(errorHandler);
调用生成器函数后,必须使用承诺,这似乎有点奇怪
当使用生成器时,其他人如何处理他们的调用代码
调用生成器函数后,必须使用承诺,这似乎有点奇怪
为什么??API仍然是一个承诺。它是否在内部使用了发电机并没有什么区别
当使用生成器时,其他人如何处理他们的调用代码
您也可以始终使用生成器添加调用代码:
async(function* () {
var bulkLoader = new GeneratorBulkLoader();
try {
yield render(yield bulkLoader.load())
} catch(e) {
errorHandler(e);
}
});
那么,您希望如何使用生成器函数?为什么在包含使用RSVP的Q代码时会标记此函数?具有讽刺意味的是,带有承诺的调用代码明显更清晰(实际上,被调用方代码也会更清晰,并且通过简单的返回
Promise.all(…)
)