gpt4 book ai didi

javascript - Angular 中的 ES6 生成器函数

转载 作者:行者123 更新时间:2023-12-03 07:45:09 25 4
gpt4 key购买 nike

最近我开始在我的 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 中是不必要的,但目前我的应用程序的运行 block 中有 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();
};

一切都按照我目前的方式进行,我唯一不喜欢的是我必须在每个 promise 之后调用 $timeout() 。如果我不这样做,在超时内初始化的 $scope 变量将不会被初始化。在我看来, Angular 摘要系统需要手动触发。

为什么会这样?有没有办法让它更干净?

最佳答案

我认为这是因为您的 spawn 方法使用 native Promise,而不是 Angular 实现。尝试使用$q相反:

function continuer(verb, arg) {
var result;
try {
result = generator[verb](arg);
} catch (err) {
return $q.reject(err);
}
if (result.done) {
return result.value;
} else {
return $q.resolve(result.value).then(onFulfilled, onRejected);
}
}

关于javascript - Angular 中的 ES6 生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35239367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com