2016-07-27 48 views
-1
... 
var me = 'you'; 
return aPromise(); 
}).then(data => { 
    // i want me here 
}) 

function aPromise() { 
    return new q.Promise((resolve, reject) => { 
     resolve(iReturnAnObject()); 
    }, reject); 
}); 

Ich möchte die me Variable innerhalb des Umfangs der then Methode. Wenn ich versuche, so etwas wie:mehrere Werte zurück, darunter ein Versprechen

... 
var me = 'you'; 
return [aPromise(), me]; 
}).then(data => { 
    let promise, me; 
    [promise, me] = data; 
    console.log(promise); //incomplete object 
}) 

Die promise Variable wird nicht das gesamte Objekt aPromise enthalten() zurückkehren sollte, ist es immer noch anhängig.

+0

können Sie klären, was der Zweck dessen ist, was Sie erreichen möchten? Ihr Codebeispiel ist ebenfalls unvollständig. – Bamieh

+0

Was macht die 'aPromise()' Funktion und was kommt zurück? – Maxx

+0

tatsächlich, 'Versprechen' wird genau das Objekt' aPromise() 'zurückgeben, wenn aPromise ein unerfülltes Versprechen zurückgibt, dann bleibt natürlich' Versprechen' unerfüllt, bis das Versprechen erfüllt ist –

Antwort

1

Sie können nur Nest das Versprechen:

... 
var me = 'you'; 
return aPromise().then(data => { 
    // me is here 
}) 

Ansonsten haben Sie die Array aufgelöster Werte wickeln:

... 
    var me = 'you'; 
    return Promise.all([aPromise(), me]); 
}).then(data => { 
    let [promise, me] = data; 
    // use me here 
    promise.then(...) 
}) 
0
somePromise.then(() => { 
    const me = 'you'; 
    return aPromise().then(aPromiseData => Promise.resolve({aPromiseData, me})) 
}).then(data => { 
    const {aPromiseData, me} = data; 
}) 
+2

While Dieser Code könnte die Frage beantworten und einen zusätzlichen Kontext für * wie * und/oder * warum * die Lösung des Problems bietet, um den langfristigen Wert der Antwort zu verbessern. –

0

Wenn ich Ihre Frage richtig verstanden habe, können Sie injizieren die Variable in den Erfolgsrückruf.

const other = 'other var'; 
 
const promise = new Promise(
 
     function(resolve, reject) { 
 
      window.setTimeout(
 
       function() { 
 
        // We fulfill the promise ! 
 
        resolve('response'); 
 
       }, 2000); 
 
     } 
 
    ); 
 

 
// or 
 

 
promise.then(function(other, response) { 
 
    console.log(other, response); 
 
}.bind(null, other))

Können Sie allerdings mehr Kontext geben? Es könnte einfacher sein, die andere Variable in resolve() zu übergeben.