【发布时间】:2016-02-06 09:22:03
【问题描述】:
最近我开始在我的 Angular 项目中使用生成器。到目前为止,我是这样做的:
function loadPosts(skip) {
return $rootScope.spawn(function *() {
try {
let promise = yield User.findAll();
$timeout(function () {
// handle the user list
});
} catch (err) {
// handle err
}
});
}
从我读到的内容来看,下一部分在 es7 中是不必要的,但目前我的应用程序的运行块中有 spawn 函数。
$rootScope.spawn = function (generatorFunc) {
function continuer(verb, arg) {
var result;
try {
result = generator[verb](arg);
} catch (err) {
return Promise.reject(err);
}
if (result.done) {
return result.value;
} else {
return Promise.resolve(result.value).then(onFulfilled, onRejected);
}
}
var generator = generatorFunc();
var onFulfilled = continuer.bind(continuer, "next");
var onRejected = continuer.bind(continuer, "throw");
return onFulfilled();
};
目前一切正常,我唯一不喜欢的是我必须在每次承诺后致电$timeout()。如果我不在超时内初始化我的$scope 变量将不会被初始化。在我看来,角度摘要系统需要手动触发。
为什么会这样?有没有办法让这个更干净?
【问题讨论】:
标签: javascript angularjs angularjs-scope ecmascript-6 angular-promise