从今天起会不断的更新学习内容,详细的学习ES6,RN相关的内容,废话不多说每日打卡中.....
写的顺序是从想了解的开始,没有什么顺序可言;
Promise:
简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。
(1)对象状态不受外界影响。异步操作有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),只有结果才能决定状态,其他任何因素无法决定状态
(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
Promise中的参数是函数,函数对处理成功和拒绝进行处理
1、Promise的立即执行性
var p = new Promise(function(resolve, reject){
console.log("create a promise");
resolve("success");
});
p.then(function(value){
console.log(value);
});
console.log("after new Promise");
执行结果:
"create a promise"
"after new Promise"
"success"
Promise对象表示未来某个将要发生的事件,但在创建(new)Promise时,作为Promise参数传入的函数是会被立即执行的,只是其中执行的代码可以是异步代码。有些同学会认为,当Promise对象调用then方法时,Promise接收的函数才会执行,这是错误的。因此,代码中”create a promise”先于”after new Promise”输出。then方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行。
2、then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。
promise实现图片异步加载
function loadImageAsync(url) { return new Promise(function(resolve, reject) { const image = new Image(); image.onload = function() { resolve(image); }; image.onerror = function() { reject(new Error('Could not load image at ' + url)); }; image.src = url; }); }
5652

被折叠的 条评论
为什么被折叠?



