0

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

  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); 
            })
    }) 

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

4

1 回答 1

0

Ciao,如果你使用 Promise 你可以resolverejectpromise 结果。就像是:

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 结果或错误。

于 2020-08-16T08:55:31.253 回答