web-dev-qa-db-fra.com

Comment passer un paramètre à une fonction de promesse

cela peut sembler une question idiote mais je suis un débutant dans ce sujet. Je travaille sur des promesses sur le noeud js. Et je veux passer le paramètre à une fonction de promesse. Cependant, je ne pouvais pas le comprendre.

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

et la fonction est quelque chose comme

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

Enveloppez votre promesse dans une fonction ou il commencera à faire son travail immédiatement. De plus, vous pouvez transmettre des paramètres à la fonction:

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

Ensuite, utilisez-le:

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

Utilisation:

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

Autrement:

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

Vous pouvez utiliser .bind () pour passer le param (this) à la fonction.

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