{ resolve()})p.then(do1) .then(._new promise((resolv">
当前位置:   article > 正文

关于Promise对象的代码题及思路分析_new promise((resolve,reject)=>{ resolve(props.mode

new promise((resolve,reject)=>{ resolve(props.modelvalue) }) }

 代码题1

  1. function do1() {
  2. console.log("任务1");
  3. }
  4. function do2() {
  5. console.log("任务2");
  6. }
  7. function do3() {
  8. console.log("任务3");
  9. }
  10. function do4() {
  11. console.log("任务4");
  12. }
  13. var p = new Promise((resolve,reject)=>{ resolve()})
  14. p.then(do1)
  15. .then(do2)
  16. .then(do3)
  17. .then(do4);

打印结果:任务1,任务2,任务3,任务4

分析:

        p是一个promise对象并且调用了resolve方法,状态为resolved肯定会走then,所以肯定会输出‘任务1’;

        p.then(do1)的返回值不是一个promise对象,那它的状态肯定是resolved,然后会输出‘任务2’,后面两个的状态也是resolved,也都会输出。

代码题2

  1. function do1() {
  2. console.log("任务1");
  3. }
  4. function do2() {
  5. console.log("任务2");
  6. }
  7. function do3() {
  8. console.log("任务3");
  9. }
  10. function do4() {
  11. console.log("任务4");
  12. }
  13. var p = new Promise((resolve,reject)=>{ resolve()})
  14. p.then(do1)
  15. .then(do2)
  16. .catch(do3)
  17. .then(do4);

打印结果:任务1, 任务2, 任务4

分析:

        p是一个promise对象并且调用了resolve方法,状态为resolved肯定会走then,所以肯定会输出‘任务1’;

        p.then(do1)的返回值不是一个promise对象,那它的状态是resolved,然后会输出‘任务2’;

        p.then(do1).then(do2)的返回值不是一个promise对象,那它的状态是resolved,不会走catch这步,所以‘任务3’不会输出,直接输出‘任务4’.

代码题3

  1. function do1() {
  2. console.log("任务1");
  3. console.log(abc); //故意犯错
  4. }
  5. function do2() {
  6. console.log("任务2");
  7. }
  8. function do3() {
  9. console.log("任务3");
  10. }
  11. function do4() {
  12. console.log("任务4");
  13. }
  14. var p = new Promise((resolve,reject)=>{ resolve()})
  15. p.then(do1)
  16. .then(do2)
  17. .then(do3)
  18. .catch(do4);

打印结果:任务1, 任务4

分析:

        p是一个promise对象并且调用了resolve方法,状态为resolved肯定会走then,所以肯定会输出‘任务1’;

         然后do1()函数中,故意犯了错误,所以它的状态是rejected,那么就直接走catch这一步,然后会输出‘任务4’。

代码题4

  1. function increment(value) {
  2. return value + 1;
  3. }
  4. function doubleUp(value) {
  5. return value * 2;
  6. }
  7. function output(value) {
  8. console.log(value);
  9. }
  10. var p = Promise.resolve(1);
  11. p.then(increment)
  12. .then(doubleUp)
  13. .then(output)

打印结果:4

分析:

        首先p是promise对象,状态为resolved,会走then(increment)这一步,然后返回值为2,不是promise对象,状态也为resolved,继续走then(doubleUp),返回值为4,然后也不是promise对象,状态也为resolved,最后走then(output),输出4。

代码题5

  1. //目标:是让sleep 的功能与setTimeout一样:就是等2000毫秒之后再执行后续操作。
  2. function sleep(time){
  3. // 请写出你的代码
  4. return new Promise((resolve,reject)=>{
  5. setTimeout(function(){
  6. resolve()
  7. },time)
  8. })
  9. }
  10. sleep(2000).then(()=>{
  11. console.log("后续操作")
  12. })
  13. console.log(2);

分析:首先我们调用sleep()方法,它的返回值一定要是promise对象,状态一定要是resolved才会走then中的函数,所以直接返回一个promise对象,并且题目要求2秒后再执行,所以就需要一个一次性定时器,时间就是调用sleep函数时传入的值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/876554
推荐阅读
相关标签
  

闽ICP备14008679号