2016-02-10 5 views
25

może to wydawać się głupie pytanie, ale jestem początkującym w tym temacie. Pracuję nad obietnicami dotyczącymi węzła js. I chcę przekazać parametr do funkcji obietnicy. Jednak nie mogłem tego rozgryźć.Jak przekazać parametr funkcji obietnicy

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

a funkcja jest coś takiego jak

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

Nie ma powodu, aby to zrobić, można tylko określić 'username' i' password' w wyższym zakresie – adeneo

+0

Ale Wołam obietnicę z innego modułu, a także nazwa użytkownika i hasło nie są statyczne, ale pochodzą od strony klienta. Czy można bezpiecznie zdefiniować somekind zmiennej gloabal, którą jedna funkcja ustawia, a druga używa. Czy istnieje ryzyko, że zmienna zostanie zmieniona przez innego klienta? – kundante

+0

@kundante Nie potrzebujesz żadnych globali. Dowiedz się więcej o zamknięciach. – SLaks

Odpowiedz

54

Wrap obietnicy wewnątrz funkcji lub zacznie wykonywać swoje zadania od razu. Plus, można przekazać parametry do funkcji:

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")); 
    } 
    }); 
} 

Następnie użyj go:

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")); 
    } 
    }); 
}; 

Zastosowanie:

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

Innym sposobem:

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);