如何将参数传递给promise函数

kun*_*nte 87 javascript node.js promise

这似乎是一个愚蠢的问题,但我是这个主题的新手.我正在研究节点js上的promises.我想将参数传递给promise函数.但是我无法理解.

someModule.someFunction.then(username, password,function(uid) {
  /*stuff */
}
Run Code Online (Sandbox Code Playgroud)

和功能是类似的

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"));
  }
});
Run Code Online (Sandbox Code Playgroud)

Sha*_*oor 172

将你的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"));
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

然后,使用它:

someModule.someFunction(username, password).then(function(uid) {
  /* stuff */
})
Run Code Online (Sandbox Code Playgroud)

 

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"));
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

使用:

someModule.someFunction(username, password).then(uid => {
  /* stuff */
});
Run Code Online (Sandbox Code Playgroud)

  • 这只是OP的一个例子 (3认同)
  • @Shanoor什么是uid?是字符串“工作成功!”吗? (2认同)
  • @OldGeezer,它只是保存诺言的回报的变量。在这种情况下,是的,这将是“工作成功!”。 (2认同)

sad*_*diq 7

另一种方法(必须尝试):

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);
Run Code Online (Sandbox Code Playgroud)

  • 如果您用解构的数组或对象进行解析,以便显示多个参数,并且已经解析了详细的promise,则您的示例会更好,如下所示:Promise.resolve([arg1,arg2,arg3]); (2认同)

小智 7

您可以在带有参数的函数中返回您的承诺。像这样:

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...
    });
Run Code Online (Sandbox Code Playgroud)


abh*_*rel 6

更短

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

foo(user, pass).then(result => {
  /* process */
});
Run Code Online (Sandbox Code Playgroud)


Slo*_*ep_ 5

不确定是否理解正确,但为了将参数从 Promise 发送到另一个函数,你可以这样做:

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)
})
Run Code Online (Sandbox Code Playgroud)