2016-02-10 17 views
25

das mag eine dumme Frage scheinen, aber ich bin ein Neuling in diesem Thema. Ich arbeite an Versprechen auf Knoten js. Und ich möchte Parameter zu einer Versprechen-Funktion übergeben. Aber ich konnte es nicht herausfinden.Wie man Parameter an eine Versprechen-Funktion übergibt

someModule.someFunction.then(username, password,function(uid) { 
    /*stuff */ 
} 

und die Funktion ist so etwas wie

var someFunction = new Promise(username, password, function(resolve, reject) { 
    /*stuff using username, password*/ 
    if (/* everything turned out fine */) { 
    resolve("Stuff worked!"); 
    } else { 
    reject(Error("It broke")); 
    } 
}); 
+1

kein Grund gibt es, das zu tun, können Sie einfach definieren 'username' und' password' in einem höheren Umfang – adeneo

+0

Aber ich rufe das Versprechen von einem anderen Modul, und auch Benutzername und Passwort sind nicht statisch, sondern kommen von der Client-Seite. Ist es sicher, irgendeine Art von globaler Variable zu definieren, die eine Funktion setzt und die andere benutzt? Besteht das Risiko, dass die Variable von einem anderen Client geändert wird? – kundante

+0

@kundante Sie benötigen keine Globals. Erfahren Sie mehr über Schließungen. – SLaks

Antwort

54

Wickeln Sie Ihre Versprechen in einer Funktion oder es beginnt seine Arbeit sofort zu tun. Darüber hinaus können Sie Parameter an die Funktion übergeben:

var someFunction = function(username, password) { 
    return new Promise(function(resolve, reject) { 
    /*stuff using username, password*/ 
    if (/* everything turned out fine */) { 
     resolve("Stuff worked!"); 
    } else { 
     reject(Error("It broke")); 
    } 
    }); 
} 

Dann verwenden Sie es:

someModule.someFunction(username, password).then(function(uid) { 
    /* stuff */ 
}) 

 

ES6:

const someFunction = (username, password) => { 
    return new Promise((resolve, reject) => { 
    /*stuff using username, password*/ 

    if (/* everything turned out fine */) { 
     resolve("Stuff worked!"); 
    } else { 
     reject(Error("It broke")); 
    } 
    }); 
}; 

Verwendung:

someModule.someFunction(username, password).then(uid => { 
    /* stuff */ 
}); 
0

Ein anderer Weg:

var promise1 = new Promise(function(resolve, reject) { 
 
    resolve('Success!'); 
 
}); 
 
var extraData = 'ImExtraData'; 
 
promise1.then(function(value) { 
 
    console.log(value, extraData); 
 
    // expected output: "Success!" "ImExtraData" 
 
}, extraData);

Verwandte Themen