How to pass parameter to a promise function

Javascriptnode.jsPromiseParameter PassingEs6 Promise

Javascript Problem Overview


this might seem a silly question but I am a newbie in this topic. I am working on promises on node js. And I want to pass parameter to a promise function. However I could not figure it out.

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

and the function is something like

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

Javascript Solutions


Solution 1 - Javascript

Wrap your Promise inside a function or it will start to do its job right away. 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:

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

Solution 2 - Javascript

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

Solution 3 - Javascript

Even shorter

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

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

Solution 4 - Javascript

You can use .bind() to pass the param(this) to the function.

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

Solution 5 - Javascript

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

Solution 6 - Javascript

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. Hopefully this helps. The setTimeout simulates "processing time". After 3 seconds the value will be returned from the promise and printed to screen.

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

Solution 7 - Javascript

Not sure if understand correctly but in order to send argument from promise to another function you can do something like this:

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

Solution 8 - Javascript

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkundanteView Question on Stackoverflow
Solution 1 - JavascriptShanoorView Answer on Stackoverflow
Solution 2 - JavascriptsadiqView Answer on Stackoverflow
Solution 3 - JavascripthunterView Answer on Stackoverflow
Solution 4 - JavascriptgogogView Answer on Stackoverflow
Solution 5 - JavascriptJermaine AntwiView Answer on Stackoverflow
Solution 6 - JavascriptsanconsView Answer on Stackoverflow
Solution 7 - JavascriptSlow_Sheep_View Answer on Stackoverflow
Solution 8 - JavascriptJulio RodriguezView Answer on Stackoverflow