我在通过我设置的 promise 链传递参数时遇到了一些问题。这是我正在尝试做的事情的一个基本示例。
var dummyReq = { client: null };
var dummyUser = { email: 'user@secretdomain.com', password: 'admin' };
function printEmail(request, user) {
return new Promise((resolve, reject) => {
console.log('Email:', user.email);
return resolve(request, user);
});
}
function printPassword(request, user) {
return new Promise((resolve, reject) => {
console.log('Password:', user.password); // <-- user is undefined
return resolve(request, user);
});
}
printEmail(dummyReq, dummyUser)
.then(printPassword)
.catch(function(error) {
console.log('Unexepected error has occured');
});
在第二个 promise 中,参数用户未定义,我如何通过 promise 链传递多个参数,随着这些 promise 的继续,更多信息被添加到链中,到最后我将 5 个值传递给最后的 promise 。
我是否应该只使用 ES6 运算符将它们组合成一个对象并在每次调用时解构它们?例如 return resolve({request, user})
然后是 const { request, user } = param
最佳答案
您走在正确的轨道上。 Promise 对象持有一个 fulfilled 值,该值被传递给 onfulfilled react 处理程序。非 promise 值,或 promise 最终实现时的已实现值,用于实现 promise 链中的下一个 promise 。如果您想将多个值传播到下一个 promise 处理程序,您必须使用单个对象值来实现。
因此,让我们假设 printEmail
和 printPassword
实际上执行了一些异步操作,而不是邮件中的同步操作。
printEmail 变成:
function printEmail(request, user) {
return new Promise((resolve, reject) => {
console.log('Email:', user.email);
resolve( {request, user} );
});
}
在新 Promise 的执行器中没有“return”语句 -
执行器函数的返回值未被使用,通常为 undefined
。
打印密码变成
function printPassword(data) {
return new Promise((resolve, reject) => {
console.log('Password:', data.user.password);
resolve(data);
});
}}
是否将数据对象解构为变量是一个风格问题,而不是技术问题。同样,无论您是将同一对象向下传递给 promise 链中的多个处理程序,根据需要删除或添加属性,还是创建仅包含后续步骤所需属性的新对象,这完全取决于选择和样式。
关于javascript - 将参数传递给 promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41818820/