链接

自动化的处理Promise中的错误

  1. /**
  2. * @description ### Returns Go / Lua like responses(data, err)
  3. * when used with await
  4. *
  5. * - Example response [ data, undefined ]
  6. * - Example response [ undefined, Error ]
  7. *
  8. *
  9. * When used with Promise.all([req1, req2, req3])
  10. * - Example response [ [data1, data2, data3], undefined ]
  11. * - Example response [ undefined, Error ]
  12. *
  13. *
  14. * When used with Promise.race([req1, req2, req3])
  15. * - Example response [ data, undefined ]
  16. * - Example response [ undefined, Error ]
  17. *
  18. * @param {Promise} promise
  19. * @returns {Promise} [ data, undefined ]
  20. * @returns {Promise} [ undefined, Error ]
  21. */
  22. // 这种处理方式来自于await-to-js
  23. const handle = (promise) => {
  24. return promise
  25. .then(data => ([data, undefined]))
  26. .catch(error => Promise.resolve([undefined, error]));
  27. }
  28. async function userProfile() {
  29. let [user, userErr] = await handle(getUser());
  30. if(userErr) throw new Error('Could not fetch user details');
  31. let [friendsOfUser, friendErr] = await handle(
  32. getFriendsOfUser(userId)
  33. );
  34. if(friendErr) throw new Error('Could not fetch user\'s friends');
  35. let [posts, postErr] = await handle(getUsersPosts(userId));
  36. if(postErr) throw new Error('Could not fetch user\'s posts');
  37. showUserProfilePage(user, friendsOfUser, posts);
  38. }