javascript - 将参数传递给 promise 链

标签 javascript

我在通过我设置的 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 处理程序,您必须使用单个对象值来实现。

因此,让我们假设 printEmailprintPassword 实际上执行了一些异步操作,而不是邮件中的同步操作。

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/

相关文章:

javascript - 如何在 Node js 中返回对 REST api 的响应

javascript - 单击按钮将 img 替换为 iframe

javascript - Node JS - 使用路由器添加更多页面(ejs 模板)

javascript - promise 首先执行特定代码

javascript - 通过弹出窗口的 Twitter OAuth

javascript - Cloud Firestore 文档 .get() 和 .where() 函数无法识别

javascript - 如何滑动 slider 鼠标悬停分页

javascript - AWS - 导入 JSON 文件以加载 Dynamo 表

javascript - w2ui 工具栏元素 - 有没有办法通过 URL 添加自定义图标?

javascript - Xpath 单击 td 中的按钮,其中行包含特定文本值