Wie fetch-Wert von Promise-Objekt nach dem Versprechen gelöst wurde
Bitte beachten Sie, Dies ist ein erfundenes Beispiel.
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
Problem
Ich bin nicht in der Lage, um herauszufinden, wie die Rückkehr der jede Art von Objekt/Funktion für das weitere downstream-processing nach shortAfterLongFunc
abgeschlossen. Ich kann Konsole.log von shortAfterLongFunc
aber das ist nicht das, was ich benötigen hier.
Fiedel Hier
Dank für das schauen!
UPDATE:
Okay, nur um meine Frage etwas besser...dieses ist ein einfaches zu verwenden, falls ich auf der Suche bin:
$.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()
können sagen, dass Prozesse, die jedes element von Array, um den unteren Fall. Allerdings übernehmen diese Verarbeitung dauert eine lange Zeit und async (denke setTimeout).. damit ein Versprechen, um sicherzustellen, synchrone operation für jedes element...aber über die Verwendung verspreche, dass ich mich nicht in der Lage, die Rückkehr der transformierten Wert
- Was hat das zu tun mit "Muster", Frage ich mich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur Kette ein weiteres
then
rufen, dashortAfterLongFunc
gibt neue Versprechen können Sie weiter arbeiten:Demo: http://jsfiddle.net/ebt4pxxa/2/
data
auspromise
...sagen, ich habe eine FunktionsomeFunc
Verpackung code:function someFunc(){longFunc().then(shortAfterLongFunc).then(function(data) { console.log('all is complted', data); }); // I want to return data when someone calls someFunc()}
function someFunc() { return longFunc().then(...); }; var pr = someFunc(); pr.then(function(data) { console.log(data) });
. Rendite Versprechen, weisen Versprechen an variable übergeben um und verwenden seinethen
Methoden zum Zugriff auf Daten gelöst.