简体   繁体   English

如何将参数传递给 promise function

[英]How to pass parameter to a promise function

this might seem a silly question but I am a newbie in this topic.这似乎是一个愚蠢的问题,但我是这个主题的新手。 I am working on promises on node js.我正在研究节点 js 的承诺。 And I want to pass parameter to a promise function.我想将参数传递给 promise function。 However I could not figure it out.但是我无法弄清楚。

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

and the function is something like function 类似于

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

Wrap your Promise inside a function or it will start to do its job right away.将您的 Promise 包裹在一个函数中,否则它会立即开始工作。 Plus, you can pass parameters to the function:另外,您可以将参数传递给函数:

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

Then, use it:然后,使用它:

some_module.some_function(username, password).then(function(uid)
{
 // stuff
})

ES6: ES6:

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

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

Use:用:

some_module.some_function(username, password).then(uid =>
{
 // stuff
});

Another way( Must Try ):另一种方式(必须尝试):

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

Even shorter更短

var foo = (user, pass) =>
  new Promise((resolve, reject) => {
    if (/* condition */) {
      resolve("Fine");
    } else {
      reject("Error message");
    }
  });

foo(user, pass).then(result => {
  /* process */
});

Not sure if understand correctly but in order to send argument from promise to another function you can do something like this:不确定是否理解正确,但为了将参数从 promise 发送到另一个 function 您可以执行以下操作:

 function logUser(username, password){ return new Promise((resolve, reject) => { let response = 'user logged in' resolve(response) }) } function showMessage(msg){ console.log(msg) } logUser('user', 'pass').then((respFromLogUser) => { showMessage(respFromLogUser) })

You can use .bind() to pass the param( this ) to the function.您可以使用 .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"}));

I know this is old, but this may help someone digging through google.我知道这是旧的,但这可能有助于有人通过谷歌挖掘。 This is a more practical example where I just pass 2 parameters to a promise function and wait for it to resolve.这是一个更实际的示例,我只需将 2 个参数传递给 promise function 并等待它解决。 Hopefully this helps.希望这会有所帮助。 The setTimeout simulates "processing time". setTimeout 模拟“处理时间”。 After 3 seconds the value will be returned from the promise and printed to screen. 3 秒后,该值将从 promise 返回并打印到屏幕上。

const addNumbers = (a, b) => {
    
  return new Promise((resolve, reject) => {
    
    setTimeout(() => {
      resolve(a + b);
    }, 3000);
  
  });
  
  
};

let getResult = async (a, b) => {
    let value = await addNumbers(a, b);
    console.log(value);
};

getResult(1, 3);

You can return your promise in a function with arguments.您可以在带参数的函数中返回您的承诺。 Like this:像这样:

function someFunction(username, password) {
      return new Promise((resolve, reject) => {
        // Do something with the params username and password...
        if ( /* everything turned out fine */ ) {
          resolve("Stuff worked!");
        } else {
          reject(Error("It didn't work!"));
        }
      });
    }
    
    someFunction(username, password)
      .then((result) => {
        // Do something...
      })
      .catch((err) => {
        // Handle the error...
      });

i use this..我用这个..

let verifyEmail = (email) => new Promise((resolve, rejected) => {
    let rsp = {isRepeated:false}
    let sql = `select id from users where email='${email}' `
    try{
        db.query(sql, (err,result)=>{
            if(!err){
                if(result.length > 0){
                    rsp = {isRepeated:true}
                }
            }
        })
        resolve(rsp)
    }catch(e){
        rejected({ok:false,err:e})
    }
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM