javascript - ES6 Promise和JQuery中Promise的区别?

查看:82
本文介绍了javascript - ES6 Promise和JQuery中Promise的区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

大家能解释一下,为啥用ES6 Promise和JQuery Promise输出的结果为啥不一样吗?

1.使用JQuery Promise

var log = console.log;

function MyPromise(fun){
  var deferred = $.Deferred();
  fun(deferred.resolve, deferred.reject);
  return deferred.promise();
}

setTimeout(function () {
    log(1);
});

new MyPromise(function(resolve, reject){
  log(2);
  resolve();
  log(3);
}).then(function(){
  log(4);
});

log(5);

输出结果如下:

2.使用ES6 Promise

var log = console.log;
setTimeout(function () {
    log(1);
});

new Promise(function (resolve) {
    log(2);
    resolve();
    log(3);
}).then(function () {
    log(4);
});

log(5);

输出结果如下:

为什么不一样呢?

3.上面两个Promise和下面这个又有什么不一样呢?

var log = console.log;

function MyPromise(fun){
  return {
      then: function(resolve, reject){
        fun(resolve, reject);
      }
  };
}

setTimeout(function () {
    log(1);
});

new MyPromise(function(resolve, reject){
  log(2);
  resolve();
  log(3);
}).then(function(){
  log(4);
});

log(5);

解决方案

因为jquery的promise的回调不保证是异步的,而es6的保证是异步的,明显es6更合理,更可控

这篇关于javascript - ES6 Promise和JQuery中Promise的区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆