大家能解释一下,为啥用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更合理,更可控