如何将参数传递给承诺函数
How to pass parameter to a promise function
这似乎是一个愚蠢的问题,但我是这个话题的新手。我正在做节点js的承诺。我想将参数传递给承诺函数。但是我无法弄清楚。
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"));
}
});
将您的
Promise 包装在函数中,否则它将立即开始工作。另外,您可以将参数传递给函数:
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"));
}
});
};
然后,使用它:
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"));
}
});
};
用:
some_module.some_function(username, password).then((uid) => {
// stuff
});
另一种方式(必须尝试):
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);
更短
var foo = (user, pass) =>
new Promise((resolve, reject) => {
if (/* condition */) {
resolve("Fine");
} else {
reject("Error message");
}
});
foo(user, pass).then(result => {
/* process */
});
您可以在带有参数的函数中返回您的承诺。喜欢这个:
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...
});
不确定是否正确理解,但为了将参数从 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)
})
你可以使用 .bind() 将参数传递给函数。
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"}));
我知道
这很老,但这可能有助于有人挖掘谷歌。这是一个更实际的例子,我只是将 2 个参数传递给一个 promise 函数并等待它解析。希望这有所帮助。setTimeout 模拟"处理时间"。3 秒后,该值将从承诺中返回并打印到屏幕上。
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);
我用这个..
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})
}
})
相关文章:
- 从函数返回角度承诺
- 如何按照承诺使用mocha/chai/chai测试ES7异步函数
- 两个函数之间的角度承诺
- 当链接javascript承诺时,如何处理then()函数中的条件
- 角承诺的“then”函数的成功回调的词汇范围是什么?
- 在承诺函数从 pouchdb 填充数据之前触发 Ionic/Angular $watch的问题
- 将 VAR 值置于承诺函数之外
- 函数抽象和承诺函数作为参数
- 如何递归调用承诺函数
- 如何将参数传递给承诺函数
- 在这种情况下,我将如何使用 javascript 创建一个承诺函数
- nodejs Q.all承诺函数调用本身
- 这个承诺函数的代码出了什么问题
- 递延和承诺函数不能正常工作
- UI-Router $stateChangeStart承诺函数
- 承诺函数给出'SyntaxError: Unexpected token}'
- 如何在茉莉花中测试javascript承诺函数
- 如何从承诺函数获得响应.然后
- 需要一些帮助,使承诺函数使用.then
- 如何在javascript函数中使用承诺函数,比如forEach reduce