作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 $resource
调用,它执行 then
,然后执行 finally
进行清理。在等待服务器时,用户可能会与系统交互,我想在 finally
方法之前添加更多 then
方法。
如何将 then
方法添加到现有 $promise
链中,并在预定义的 finally
之前执行?
下面是所需用例的简化代码示例。将 then
方法添加到现有链可以由 $on
、$watch
或某些例程触发。
function ctrl($scope, $timeout) {
var a = $timeout(function() {
console.log("Time out complete");
return this;
}, 1000).finally(function() {
console.log("Finally called!");
});
// some logic
// some events
// some stuff happens
// then something might insert this
// into the promise chain.
a.then(function() {
console.log("Another then!");
});
};
期望的结果:
> Time out complete
> Another then!
> Finally called!
当前结果:
> Time out complete
> Finally called!
> Another then!
最佳答案
您需要从一开始就在链中包含潜在的 then
调用。不过,您可以从回调函数中无限地返回新的 Promise。
var todo = [];
function checkTodos() {
if (todo.length)
return todo.shift()().then(checkTodos);
// do the chained task, and when finished come back to check for others
else
return todo = null;
}
function add(task) {
if (todo)
todo.push(task);
else
throw new Error("Sorry, timed out. The process is already finished");
}
$timeout(function() {
console.log("Time out complete");
return this;
}, 1000).then(checkTodos).finally(function() {
console.log("Finally called!");
});
// some stuff happens
// then something might insert this into the promise chain:
add(function() {
console.log("Another then!");
});
// Assuming it was fast enough.
关于javascript - 将 "then"方法添加到 $promise 链中预定义的 "finally"方法之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24656352/
我是一名优秀的程序员,十分优秀!