【发布时间】:2015-08-08 04:49:12
【问题描述】:
我创建了这个简单的代码来模拟resolve、reject、error:
function $http(){
var core = {
factory : function (action) {
var promise = new Promise( function (resolve, reject) {
if (action==='resolve') resolve({r:'Resolved'});
if (action==='error') throw Error("error");
if (action==='reject') reject({r:'Reject'});
});
return promise;
}
};
return {
'simulate' : function(a) {
return core.factory(a);
}
};
}
var callback = {
success : function(data){
console.log(1, 'success', data.r);
},
error : function(data){
console.log(2, 'error',data.r);
},
reject : function(data){
console.log(3, 'reject', data.r);
}
};
现在让我们调用它们:
$http().simulate('resolve')
.then(callback.success,callback.reject)
.catch(callback.error); //"success" "Reolved"
$http().simulate('reject')
.then(callback.success,callback.reject)
.catch(callback.error); //"reject" "Reject"
$http().simulate('error')
.then(callback.success,callback.reject)
.catch(callback.error);//"reject" undefined
如您所见,reject/resolve 都有效。
问题:
为什么没有:
error : function(data){
console.log(2, 'error',data.r);
}
函数运行,当我模拟error 时?
【问题讨论】:
-
这是因为你在做
data.r但是当你抛出错误时它不存在这就是为什么你会因为data.r不存在而变得未定义,至于它为什么调用reject而不是我不知道的错误。而是尝试data.message而不是data.r错误之一? -
我没有问 undefined,我问的是错误 func :-)
-
好问题。
then(success,reject)与then(success).catch(reject)相同,所以我猜如果您向then提供reject,它不会执行您的catch -
@RGraham 不,不是。
-
是的,这就是我的意思 - 在某些情况下你会得到不同的行为 - 即在
.then(success).catch(fail)处理失败处理程序中的成功处理程序中的错误,.then(success, fail)不会。
标签: javascript promise ecmascript-6