当前位置:  开发笔记 > 编程语言 > 正文

将参数传递给promise链

如何解决《将参数传递给promise链》经验,为你挑选了1个好方法。

我在通过我设置的承诺链传递参数时遇到了一些问题.这是我正在尝试做的一个基本的例子.

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中,参数user是未定义的,我如何通过promise链传递多个参数,因为这些promises继续将更多信息添加到链中,到最后我将5个值传递给最后一个promise.

我应该只使用ES6运算符将它们组合成一个对象并在每次调用时解构它们吗?例如return resolve({request, user})然后const { request, user } = param



1> traktor53..:

你走在正确的轨道上.Promise对象包含一个已实现的值,该值将传递给onfulfilled反应处理程序.非承诺价值,或最终履行时承诺的履行价值,用于履行承诺链中的下一个承诺.如果要将多个值传播到下一个promise处理程序,则必须使用单个对象值来执行此操作.

所以让我们假设printEmail并且printPassword实际上做了异步而不是帖子中的同步操作.

printEmail变为:

function printEmail(request, user) {
    return new Promise((resolve, reject) => {
        console.log('Email:', user.email);
        resolve( {request, user} );
    });
}

在新Promise的执行者中没有"return"语句 - 执行函数的返回值不被使用,通常是 undefined.

printPassword成为

function printPassword(data) {
    return new Promise((resolve, reject) => {
        console.log('Password:', data.user.password);
        resolve(data);
    });
}}

是否将数据对象解构为变量是一种风格而不是技术问题.类似地,无论是将同一个对象传递给Promise链中的多个处理程序,还是根据需要删除或添加属性,或者只创建一个只包含后续步骤所需属性的新对象,完全取决于选择和样式.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有