假设我有 X
、Y
和 Z
函数,所有函数都返回 Promise 并准备好链接。我想做的是在完成后通知进度并处理错误。写什么比较好以及为什么(会产生什么后果):
A.
function my_func(index, size){
return X
.then(Y)
.then(Z)
.then(
function(data){
var dfd = new $.Deferred();
dfd.notify("progress", index / size, 'OK');
dfd.resolve(data);
return dfd.promise();
},
function(){
return handleError(arguments, size, index);
}
);
}
或
B.
function my_func(index, size){
var dfd = new $.Deferred();
X
.then(Y)
.then(Z)
.then(
function(data){
dfd.notify("progress", index / size, 'OK');
dfd.resolve(data);
},
function(){
return handleError(arguments, size, index);
}
)
return dfd.promise();
}
另外,有什么区别:
X.then(Y).then(Z);
和:
$.when(X).then(Y).than(Z);
如果$.when
部分是不必要的,为什么它存在于jQuery中?
最佳答案
后者是不必要的。这只是额外的粗俗。 $.when
对于将值转换为 Promise 和聚合非常有用。
这是一个平均 $.when
用例:
$.when($.get(...),$.get(...)).then(function(firstResult,secondResult){
// access both results here
});
您可以在此处使用这两个结果,两者都已完成。
至于第一个问题 - 基本上是 B。第一个选项是 deferred anti pattern并且最好避免。请参阅link to it询问为什么。
关于javascript - 如何从 JavaScript 函数返回 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24672983/