Как получить значение из объекта Promise после разрешения promise
обратите внимание, что это надуманный пример.
function longFunc(){
var deferred = $.Deferred();
setTimeout(function(){
console.log("long func completed");
deferred.resolve("hello");
}, 3000);
return deferred.promise();
}
function shortAfterLongFunc(x){
console.log('short func completed with value: ' + x);
return {
a: x
};
}
processFurther(longFunc().then(shortAfterLongFunc)); // send the array for further processing
Я не могу понять как вернуть любой объект / функцию для дальнейшей обработки после shortAfterLongFunc
завершается. Я могу утешить.журнал shortAfterLongFunc
но это не то, что мне нужно здесь.
Скрипку Здесь
Спасибо за просмотр!
обновление:
хорошо, чтобы сделать мой вопрос немного лучше...это простой случай использования, на который я смотрю:
$.map(['H','E','L','L', 'O'], somefunc). // for each item in array apply somefunc function
function somefunc(x){ // gets called for each value 'H', 'E' etc. in the array by $.map()
var longfunc = function(y){
var deferred = $.Deferred();
setTimeout(function(){
console.log("long func completed");
deferred.resolve(y.toLocaleLowerCase());
}, 3000);
return deferred.promise();
};
var shortAfterLongFunc = function(x){
console.log('short func completed with value: ' + x);
return x;
}
// What should I do here
return longFunc(x).then(shortAfterLongFunc); // must return lower case char to the caller of someFunc
}
somefunc()
скажем, обрабатывает каждый элемент массива в нижнем регистре. Однако предположим, что эта обработка занимает много времени и асинхронна (подумайте setTimeout).. следовательно, обещание обеспечить синхронную работу для каждого элемента...но при использовании promise я не могу вернуть преобразованное значение
1 ответов
просто цепь другой then
вызова, начиная с shortAfterLongFunc
возвращает новое обещание вы можете работать с ним дальше:
longFunc().then(shortAfterLongFunc).then(function(data) {
console.log('all is complted', data);
});