我有以下生成器功能:
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);
在调用生成器函数后,这似乎有点奇怪,不得不使用promises。
在使用生成器时,其他人如何处理他们的调用代码?
答案 0 :(得分:1)
在调用生成器函数后,这似乎有点奇怪,不得不使用promises。
为什么呢? API仍然是一个承诺。它是否在内部使用发电机并没有什么不同。
在使用生成器时,其他人如何处理他们的调用代码?
您也可以随时使用生成器来为您的调用代码添加糖:
async(function* () {
var bulkLoader = new GeneratorBulkLoader();
try {
yield render(yield bulkLoader.load())
} catch(e) {
errorHandler(e);
}
});