Deferred 与 Promise 的关系
Promise的定义: https://promisesaplus.com/ 或者 http://www.alloyteam.com/2014/05/javascript-promise-mode/
- 简单的说,promise有三种状态
让我们还是能过代码, 了解两者之间的关系
第一种情况: 直接定义一个Promise对像
所以不能直接初始化一个Promise对像, 因为dojo/promise/Promise只是一个抽像类,而没有具体的方法,调用then方法,throw new TypeError("abstract"); 而且Promise规范中没有要求定义修改状态的方法
比如,resolve 和 reject
var promise = new Promise(); promise.then() // 抛出一个错误
所以不能直接初始化一个Promise对像, 因为dojo/promise/Promise只是一个抽像类,而没有具体的方法,调用then方法,throw new TypeError("abstract"); 而且Promise规范中没有要求定义修改状态的方法
比如,resolve 和 reject
第二种情况: 定义一个Deferred 对像
var deferred = new Deferred(); // deferred 对像也拥有 then 方法,用于添加回调函数, 跟deferred.promise.then 的操作是一样的 // 但如果只返回 这个deferred.promise的话,就没办法调用resolve reject等方法 var promise = deferred.then(function(a){}(console.log(a),function(err){console.log(err)); // 跟deferred.promise.then是一样的。
第三种情况,包装到第三方对像,并返回一个Promise,dojo/request
var req = request("/"); // 在ajax中, 要初始化一个deferred对像(私有接口, 不会返回这个对像,request 对像会内部操作 deferred.resolve,及 deferred.reject),并返回这个deferred 的promise;
Promise 的使用
翻译官方教程http://dojotoolkit.org/documentation/tutorials/1.10/promises/
原文链接:https://www.f2er.com/dojo/291108.html