2017-05-25 6 views
0

den Code unten gegeben:Schleife mit dem Versprechen

var arr = ['one', 'two'] 

for (index in arr) { 
    console.log('outside promise:', arr[index]) 

    myPromise().then(function(response) { 
    console.log('inside promise:', arr[index]) 
    }) 
} 

Meine Ausgabe:

// outside promise: one 
// outside promise: two 
// inside promise: one 
// inside promise: one 

Warum die die Konsolenausgabe innerhalb der Versprechen Hack nicht Schleife Trog Werte?

+1

Könntest du klarer sein, ich verstehe nicht wirklich, was dein Problem ist? –

+0

Wo ist 'myPromise' definiert? Was ist das erwartete Ergebnis? – guest271314

+0

innerhalb Ihrer Schleife try var x = arr [index]; dann console.log (x) in das Versprechen – PenAndPapers

Antwort

0

Wie @Jaromanda X im Kommentar angegeben, wird korrekt ausgegeben:

// outside promise: one 
// outside promise: two 
// inside promise: TWO 
// inside promise: TWO 

Da Versprechen werden gelöst werden, wenn Index bereits 1 sein wird, nicht 0. Wenn Sie unterschiedliche Ergebnisse in der Konsole bekommen, es stdout sein kann Nebenläufigkeitsprobleme. Versuchen Sie, Ergebnisse zu dem Array hinzuzufügen, und geben Sie es dann aus;

const arr = ['one', 'two']; 
let results = []; 

for (index in arr) { 
    results.push(`outside promise: ${arr[index]}`) 

    myPromise().then(function(response) { 
     results.push(`inside promise: ${arr[index]}`) 
    }) 
} 

console.dir(results); 
+0

Es gibt keinen Unterschied, ob Sie den Wert protokollieren oder ihn an ein Array (in zeitliche Koordinierung). Das Problem ist das gleiche. – Thomas

+0

@Thomas welches Problem? –

+0

, dass das 'array [index]' innerhalb des Closings aufgelöst wird, NACHDEM die Schleife Iteriert wurde. Und das für alle Iterationen mit dem gleichen Index, dem letzten. – Thomas

Verwandte Themen