promise
- 构造函数,是ES6中提出的异步编程解决方案,同步操作的异步代码,可以用来解决回调地狱
首先promise是一个对象 如果使用的时候需要new Promise参数是一个一个回调函数
回调函数中有2个参数 resolve(成功) reject(失败) 在异步操作的内部进行调用
同时也可以进行传值,但是传值只能传递一个值
如果通知成功或者失败以后可以通过then去执行下一步操作.then的参数是2个回调函数
第一个回调函数是成功的回调 第二个回调是失败的回调失败的回调也可以catch()
构造一个 Promise ,最基本的用法如下:
var promise = new Promise(function(resolve, reject) {
if (...) { // succeed
resolve(result);
} else { // fails
reject(Error(errMessage));
}
});
jQuery的ajax返回的是promise对象吗?
不是,jquery的ajax返回的是deferred(延迟)对象,通过promise的resolve()方法将其转换为promise对象。
promise只有2个状态,成功和失败,怎么让一个函数无论成功还是失败都能被调用?
使用promise.all(),Promise.all方法用于将多个Promise实例,包装成一个新的Promise实例。
处理一个以promise实例为元素的数组:
promise.all() promise.race()
promise应用:
-
ajax封装
将ajax的数据请求和数据处理分别放在不同的模块中进行管理,降低后期维护成本,便于管理。
1:首先,将所有的url放在一个模块中统一处理。
2:第二步,将所有的数据请求这个动作放在同一个模块中统一管理。
3:第三步:就是拿到数据并且处理数据了。 -
*图片加载的问题
有一些图片需要放置在某一个块中,比如头像,比如某些图片列表。可是源图片的尺寸可能很难保证长宽比例都是一致的,
如果我们直接给图片设定宽高,就有可能导致图片变形。变形之后高大上的页面就直接垮掉了。
因此为了解决这个问题,我们需要一个定制的image组件来解决这个问题。我们期望图片能够根据自己的宽高比,合理的缩放,
保证在这个块中不变形的情况下尽可能的显示更多的内容。获取图片的原始宽高,需要等到图片加载完毕之后才能获取。
此时就需要调用promise对象 -
自定义弹窗的处理
利用Promise,当我们点击确认时,状态变成resolved,点击取消时,状态变成rejected。这样也方便将弹窗生成与后续的操作处理区分开来。