これはばかげた質問に思えるかもしれませんが、私はこのトピックの初心者です。私はノードjsのプロミスに取り組んでいます。そして、promise関数にパラメーターを渡したいです。しかし、私はそれを理解できませんでした。
someModule.someFunction.then(username, password,function(uid) {
/*stuff */
}
関数は次のようなものです
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"));
}
});
Promiseを関数内にラップしないと、すぐに仕事を始めます。さらに、関数にパラメーターを渡すことができます。
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"));
}
});
}
次に、それを使用します。
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"));
}
});
};
つかいます:
someModule.someFunction(username, password).then(uid => {
/* stuff */
});
別の方法:
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);
.bind()を使用して、param(this)を関数に渡すことができます。
var someFunction =function(resolve, reject) {
/* get username, password*/
var username=this.username;
var password=this.password;
if ( /* everything turned out fine */ ) {
resolve("Stuff worked!");
} else {
reject(Error("It broke"));
}
}
var promise=new Promise(someFunction.bind({username:"your username",password:"your password"}));