JavaScript原生Promise对两个结果执行回调
JavaScript native Promise execute callback on both results
有没有办法对Promise对象的两个结果执行回调?
例如,我想在执行xhr请求后进行一些清理逻辑。所以我需要做这样的事情:
var cleanUp = function() { something.here(); }
myLib.makeXhr().then(cleanUp,cleanUp);
例如,在jquery Defered中,我可以使用方法always():
myLib.makeXhr().always(function() { something.here(); });
Promise支持这样的东西吗?
没有,没有已经讨论过了,但规格很低。它不包括一堆其他功能。它的设计目的是与库承诺进行良好的互操作,并提供简单的功能。
以下是Steffanner最初提出的建议的正确polyfill。
此外,我不同意当前已删除的答案自己添加它,因为他们都做错了(作为一个可枚举属性-没有乐趣)。即使我们忽略它对返回的promise的返回值和错误状态的影响。扩展本机promise的预期方法是将其子类化,遗憾的是,目前还没有浏览器支持这一点,所以我们只能等待。
与其干扰原生原型,我们应该使用一种不同的模式:
openDb().then(foo).then(bar).finally(close).then(more);
我们很容易忘记关闭,即使我们在应用程序中打开它100次,忘记关闭它哪怕一次也可能是毁灭性的。另一方面,我们可以使用一些promise库提供的处理器模式:
openDb(function(db){
return foo(db).then(bar);// chain here
}).then(more);
基本上,这种模式意味着openDB
不返回promise,而是接受一个函数,返回一个promise,当函数运行时,如果它返回一个promise,我们将等待该promise得到解决。它看起来像:
function openDb(withDb){
return justOpenWithoutCleanUp().
then(withDb).
then(clean, function(e){ clean(); throw e; }); // note the rethrow
}
例如:
var oPromise=jQuery.ajax({网址:YOUR_url}).valways(function(){YOUR_CLEAN_UP_METHOD();})
相关文章:
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- Jquery - 将我的两个类相乘没有结果
- 根据两个异步函数调用的结果执行
- 1行代码(console.log),代码中的两个位置=两个结果差异
- 添加两个数字,并使用Javascript在文本框中显示结果
- 在模板帮助程序中连接两个查询的结果
- 在比较和匹配两个对象列表时,防止结果列表中重复
- 如何使用 Ajax 比较来自两个不同来源的结果
- 当我尝试两个 DOM 中的 get 元素时,HTML 和 Xpath 结果未定义
- 如果我有两个选项的代码,单选按钮的结果将无法正常工作
- 了解两个代码解决方案之间的结果差异
- 如何检查两个单独函数的执行结果
- Jquery 优化表的结果:两个或多个逻辑语句
- 2 可变结果不能有两个
- 将 JavaScript 结果打印到两个 DIV 而不是输入中
- Sails-mongo在两个日期之间得到结果
- 不同的结果是减去这两个值
- JavaScript原生Promise对两个结果执行回调
- Backbone JS-Model返回两个结果,而不是一个
- 如何一次用两个结果进行两个验证