Поэтому мой API ожидает, что при разрешении конкретного отложенного он получит 2 параметра.
fn().done(function(arg1, arg2) {
console.log(arg1, arg2);
}).fail(function(err) {
console.error(err);
});
Теперь, что касается вышеприведенной функции fn
, ей нужно сначала дождаться возврата какого-либо другого deferred перед разрешением.
function other() {
// stubbed out to always resolve
return $.Deferred().resolve().promise();
}
function fn() {
return other().then(function() {
return [1, 2];
});
}
Но это не работает, потому что arg1
придет как [1, 2]
, а arg2
будет undefined
. Я не могу понять, как вернуть что-то из Deferred.then()
первого аргумента функции фильтра успеха, чтобы результирующий отложенный конвейер разрешался с несколькими аргументами.
Конечно, я могу сделать это:
function fn() {
var done = $.Deferred();
other().done(function(){
done.resolve(1, 2);
}).fail(function(){
done.reject.apply(done, arguments);
});
return done.promise();
}
Но это далеко не так элегантно, как использование .then()
, и теперь мне нужно каждый раз беспокоиться об API в случае отрицательного сбоя, хотя я знаю, что просто передаю отклоненное состояние.
И да, я также мог бы изменить fn()
API для разрешения массива, но я действительно надеюсь, что для этого есть элегантное решение.
resolve
с двумя параметрами является правильным методом их передачи. - person Gone Coding   schedule 11.07.2014then()
? - person codefactor   schedule 11.07.2014return {one: 1, two: 2};
- person Gone Coding   schedule 11.07.2014then()
- person codefactor   schedule 11.07.2014