web-dev-qa-db-ja.com

promise関数にパラメーターを渡す方法

これはばかげた質問に思えるかもしれませんが、私はこのトピックの初心者です。私はノード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"));
  }
});
65
kundante

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 */
});
129
Shanoor

別の方法:

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

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