如果没有其他函数链接到promise,则默认行为
Default behavior if no other functions chained to a promise
我想打开一个"确认您想取消对话框",如果没有链接其他功能,则默认为导航回一个页面($window.history.back();
)。
如果我传入回调,我可能会这样做:
function openCancelModal(form, callback) {
if (form.$dirty) {
var message = '...';
modalThingy.open(message).then(callback || default);
}
function default() {
$window.history.back();
}
}
然而,这会吞噬使用承诺的力量(冷静)。
是否有返回promise的方法,但如果没有任何链接,则调用默认函数
我使用angularjs,但我想这个问题有一个通用的答案。
有没有一种方法可以回报承诺,但如果没有任何东西与之相连然后调用默认函数?
在您从函数返回promise时,调用者甚至还没有看到promise对象,因此它甚至没有机会看到调用者在返回promise后会做什么或不会做什么,因此在您返回promise之前,无法提前设置或查看任何内容。
此外,标准promise对象不提供任何方法来查询附加了什么处理程序或没有附加什么处理程序。
有一些棘手的事情可以做(尽管我不认为我会推荐它们)。
例如,您可以覆盖要返回的promise上的.then()
,这样您就可以在promise被解析之前查看它是否被调用,并且您可以在自己的状态下跟踪该信息。然后,当promise得到解决时,如果尚未调用.then()
,则可以执行默认行为。
这是一个关于这种黑客计划的概述:
function someAsync() {
var foundThenHandler = false;
var p = new Promise(function(resolve, reject) {
// some code that eventually and asynchronously
// calls resolve or reject
// as long as the code here executes some time in the future
// after the caller has seen the returned promise and had a chance to
// add its own .then() handlers, then the code can check the
// foundThenHandler variable to see if .then() was ever called on it
// For example:
setTimeout(function() {
resolve();
if (!foundThenHandler) {
// carry out some default action
}
}, 1000);
});
var oldThen = p.then;
p.then = function(resolveHandler, rejectHandler) {
foundThenHandler = true;
return oldThen.apply(p, arguments);
}
return p;
}
someAsync().then(function(val) {
// async operation finished, default action will not be triggered
});
// no .then() handler attached, default action will be triggered
someAsync();
相关文章:
- 用嵌套函数和默认函数定义函数
- 使用promise和mongoose对文档进行排序
- 如何使用铁流星与流星的默认路线
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- CKeditor:更改对话框中的默认选择选项
- 测试Angular Service解决错误回调中的promise
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何从外部页面激活非默认引导选项卡
- 防止默认锚点行为AngularJS
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- jpm的默认Firefox路径没有'不起作用
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 节点协同与生成器和Promise并行流量控制
- 如果值为空,如何设置输入的默认值?jQuery
- 骨干模型默认值-todos.js示例中不必要的代码
- jquery日期选择器年份范围默认值
- jQuery:当屏幕大小改变时,如何更改默认图像和悬停图像
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- 如果没有其他函数链接到promise,则默认行为
- jQuery promise的默认错误函数