当cujojs中的.all()2.2.1没有'如果延期拒绝,则不拒绝
when.all() 2.2.1 in cujojs doesn't reject if one deferred rejected
当文档说应该拒绝承诺时,我很难弄清楚为什么承诺得到了履行。
打开http://jsbin.com/orifok/5/edit然后单击go按钮,当它应该提醒"失败"时,它会提醒"ok"。
将when221.all...
替换为deferred2.promise.then(stepFulfilled, stepRejected);
,则发生拒绝。
我确实修改了when.js代码,使when221变量成为全局变量,而不需要依赖require.js库(请参阅http://pastebin.com/J8wCqjWM与原件相比https://github.com/cujojs/when/blob/2.2.1/when.js)。
when.all()documentatation表示:如果任何一个promise被拒绝,则返回的promise将被拒绝,拒绝原因为被拒绝的第一个promise-请参阅https://github.com/cujojs/when/blob/master/docs/api.md#whenall
tl;博士:when.all必须通过promise,而不是delay,程序员需要非常小心,不要犯那个错误。
Brian Cavalier在这里回答道:https://github.com/cujojs/when/issues/172修改后的代码如下:http://jsbin.com/orifok/10/edit
答案如下:
嗨,您的示例代码将延迟对象传递给when.all。延迟对象不是promise。不幸的是,一些库,如jQuery,以及无可否认的when.js的早期版本,将promise和递延对象混为一谈。为了澄清这一点,我最近开始将延迟对象简单地称为对{resolver,promise}。你应该把承诺而不是延期对象传递给何时
以下是您的示例的修订版本,它将如您所期望的那样工作:
(function(){
var deferred1 = when221.defer();
var deferred2 = when221.defer();
window.clickgo = function() {
// Pass the promise, not the deferred
when221.all([deferred1.promise, deferred2.promise]).then(stepFulfilled, stepRejected);
deferred2.reject('foooo');
};
function stepFulfilled() {
alert('ok');
}
function stepRejected(failed) {
alert('failed ' + failed);
}
})();
还要注意的是,when,js>=2.2.0还有一个新的、更轻的承诺创建API when.promise,我已经开始推荐它而不是when.defer。它们适合不同的情况,但我发现大多数时候我更喜欢它。
希望能有所帮助!
- 如果 a 为 false,则 if(a) === if(false)
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如果文本字段为空,则使用JavaScript应用CSS样式
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 如果href包含X,请更改href
- AngularJS决心承诺.如果承诺被拒绝,则重定向
- 如果mysqldb中存在用户名,则拒绝提交表单
- 当cujojs中的.all()2.2.1没有'如果延期拒绝,则不拒绝
- 如果没有被拒绝,承诺链将产生
- 相对地理位置,如果用户拒绝实际地理位置
- 如果用户在onbeforeunload事件中拒绝离开页面,是否会在事件发生后触发一个事件?
- 如果我使用javascript sdk作为后端,应用商店会拒绝我的应用吗?
- 如果我用另一个Promise值拒绝一个Promise会发生什么?
- Select2 -拒绝清除输入字段,如果没有找到结果则禁用表单
- 如果未授予/拒绝访问,则会超时
- 如果Hybrid应用程序从远程服务器加载包括javascript在内的资源,苹果会拒绝它吗
- 如果上一次提交仍然有效,如何拒绝HTML表单提交
- 获取:拒绝承诺,如果状态不正常,则捕获错误