簡體   English   中英

創建 promise 鏈

[英]create a promise chain

我需要用用戶數據創建一個 object。

  1. 第一個 promise 給出了用戶的位置(城市)。

2.第二個是他的角色,根據角色,你需要為他編寫一個email(如果用戶是admin - email應該以admin.Z4D236D9A2D102C5FE6AD1C50DA4BEC5結尾)和其他角色類似

3.此外,如果用戶是管理員,則需要調用 function,將用戶 id 傳入其中,並根據 id 返回一個數字,該數字將指示其組中的人數(對於此 function,您可以用一個promise,你可以自己想id和人數匹配,可以是object,key為id,值為person。{1:3, 2:5}等)

4.總的來說,如果用戶是管理員,並且鏈已經開始忽略組中的人員列表,則僅使用 throw new Error(錯誤文本)拋出錯誤。 如果用戶是管理員,但組中的人數超過了指示,則拋出相應的錯誤,promins 鏈應該以一個錯誤結束,說明發生了什么。 要構建此類場景,您可以更改 Promise 的初始 state,如有必要,將其拒絕。 傳輸的相同數據也可以更改,但我們不更改 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); 
            })
    }) 

但是如何編寫一個 email 並顯示必要的錯誤以及角色和人數,最后返回 object 對嗎? 請幫忙

Ciao,如果您使用 Promise,您可以resolvereject promise 結果。 就像是:

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

使用這種模式,您可以像這樣重寫 promise 鏈:

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 結果或錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM