Как получить значение из объекта 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);
});

демо:http://jsfiddle.net/ebt4pxxa/2/