当前位置:   article > 正文

Promise面试题

Promise面试题

promise与 fetch、async/await_fetch async 获取结束标志-CSDN博客

手写promise A+、catch、finally、all、allsettled、any、race-CSDN博客

【建议星星】要就来45道Promise面试题一次爽到底(1.1w字用心整理) - 掘金

目录

每隔1秒输出1,2,3

红黄绿灯交替亮

按序执行数组

异步加载图片


每隔1秒输出1,2,3

  1. const arr = [1, 2, 3]
  2. arr.reduce((p, x) => {
  3. return p.then(() => {
  4. return new Promise(r => {
  5. setTimeout(() => r(console.log(x)), 1000)
  6. })
  7. })
  8. }, Promise.resolve())

红黄绿灯交替亮

  1. function red() {
  2. console.log("red");
  3. }
  4. function green() {
  5. console.log("green");
  6. }
  7. function yellow() {
  8. console.log("yellow");
  9. }
  10. const light = function (timer, cb) {
  11. return new Promise(resolve => {
  12. setTimeout(() => {
  13. cb()
  14. resolve()
  15. }, timer)
  16. })
  17. }
  18. const step = function () {
  19. Promise.resolve().then(() => {
  20. return light(3000, red)
  21. }).then(() => {
  22. return light(2000, green)
  23. }).then(() => {
  24. return light(1000, yellow)
  25. }).then(() => {
  26. return step()
  27. })
  28. }
  29. step();

按序执行数组

  1. const time = (timer) => {
  2. return new Promise(resolve => {
  3. setTimeout(() => {
  4. resolve()
  5. }, timer)
  6. })
  7. }
  8. const ajax1 = () => time(2000).then(() => {
  9. console.log(1);
  10. return 1
  11. })
  12. const ajax2 = () => time(1000).then(() => {
  13. console.log(2);
  14. return 2
  15. })
  16. const ajax3 = () => time(1000).then(() => {
  17. console.log(3);
  18. return 3
  19. })
  20. function mergePromise (ajaxArray) {
  21. // 存放每个ajax的结果
  22. const data = [];
  23. let promise = Promise.resolve();
  24. ajaxArray.forEach(ajax => {
  25. // 第一次的then为了用来调用ajax
  26. // 第二次的then是为了获取ajax的结果
  27. promise = promise.then(ajax).then(res => {
  28. data.push(res);
  29. return data; // 把每次的结果返回
  30. })
  31. })
  32. // 最后得到的promise它的值就是data
  33. return promise;
  34. }
  35. mergePromise([ajax1, ajax2, ajax3]).then(data => {
  36. console.log("done");
  37. console.log(data); // data 为 [1, 2, 3]
  38. });
  39. // 要求分别输出
  40. // 1
  41. // 2
  42. // 3
  43. // done
  44. // [1, 2, 3]

异步加载图片

  1. function loadImg(url) {
  2. return new Promise((resolve, reject) => {
  3. const img = new Image();
  4. img.onload = function() {
  5. console.log("一张图片加载完成");
  6. resolve(img);
  7. };
  8. img.onerror = function() {
  9. reject(new Error('Could not load image at' + url));
  10. };
  11. img.src = url;
  12. });
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/467542
推荐阅读
相关标签
  

闽ICP备14008679号