【问题标题】:create a promise chain创建一个承诺链
【发布时间】:2020-12-05 15:18:36
【问题描述】:

我需要用用户数据创建一个对象。

  1. 第一个承诺给出了用户的位置(城市)。

2.第二个是他的角色,根据角色,你需要为他写一封电子邮件(如果用户是管理员 - 电子邮件应该以admin.com结尾,其他角色也一样)

3.此外,如果用户是管理员,则需要调用该函数,将用户 id 传递给它,并根据 id 返回一个数字,该数字将指示其组中的人数(对于此函数,可以用promise,可以自己想id和人数匹配,可以是一个有key id 有value的对象。{1:3, 2:5}等)

4.总的来说,如果用户是管理员,并且链已经开始忽略组中的人员列表,则仅使用 throw new Error(错误文本)抛出错误。如果用户是管理员,但组中的人数超过了指定的数量,则抛出相应的错误,promins 链应该以一个错误结束,说明发生了什么。 要构建这样的场景,您可以更改 Promise 的初始状态,必要时将其拒绝。同样传输的数据也可以改变,但是我们不改变setTimeout中的时间。

const promise1 = new Promise(resolve) => {
  setTimeout(() => Promise.resolve('Madrid'), 1000); // location
} 
const promise2 = new Promise(resolve) => {
  setTimeout(() => Promise.resolve('admin'), 4000); // three role - guest, user, admin
} 
const promise3 = new Promise(resolve) => {
  setTimeout(() => Promise.resolve('1'), 2000); // id user, number can be any
}
const promise4 = new Promise(resolve) => {
  setTimeout(() => Promise.resolve(['Alex', 'Vlad', 'Marta', 'Alexandr', 'Stefan']), 1000); // an array that shows the people in a person's group
}

鉴于承诺链,有必要重写 这是我的解决方案

let promise = new Promise((resolve) => {
    setTimeout(() => resolve(city), 1000);
}).then((role) => {
    if(role != 'admin') {
        throw new Error('not admin')
    }
    return new Promise((resolve) => { 
        setTimeout(() => resolve(admin), 4000);
        })
    }).then((id) => {
        return new Promise((resolve) => {
            setTimeout(() => Promise.resolve(id), 2000); 
        })
    }).then((people) => {
        return new Promise((resolve) => {
                setTimeout(() => Promise.resolve(people), 1000); 
            })
    }) 

但是如何撰写电子邮件并显示必要的错误以及角色和人数并最终返​​回对象?请帮忙

【问题讨论】:

    标签: javascript node.js promise


    【解决方案1】:

    Ciao,如果你使用 Promise,你可以 resolvereject 承诺结果。比如:

    const promise1 = () => { 
      return new Promise(resolve, reject) => {
         if (/*condition*/) setTimeout(() => resolve('Madrid'), 1000);
         else reject("this is an error");
      } 
    }
    

    使用这种模式,您可以像这样重写您的承诺链:

    promise1()
       .then((result) => {
           // here result = "Madrid" 
           // well lets call the second promise promise2   
        })
        .catch((error) => {
           //here error = "this is an error"
           // manage the error
        });
    

    通过这种方式,您可以轻松管理 Promise 结果或错误。

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 2013-05-20
      • 1970-01-01
      • 2013-11-25
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2019-05-10
      相关资源
      最近更新 更多