Promise异步编程解决方案
Promise是ES6中新增的异步编程解决方案,体现在代码中它是一个对象,可以通过 Promise 构造函数来实例化。
其最基本的使用 new Promise(function(resolve,reject){}) 传两个参数resolve和reject 然后再逻辑里返回resolve和reject 它有两个原型方法
Promise.prototype.then()
Promise.prototype.catch()
两个常用的静态方法
Promise.all()
Promise.resolve()
//一:原型方法
const imgs = [
'http://wap.cmread.com/tingmedia/lingxi/image/head/default_head_logo.png',
'http://wap.cmread.com/tingmedia//image/1/55/72.jpg',
'http://wap.cmread.com/tingmedia//image/1/55/72.jpg'
];
var p=new Promise(function(resolve,reject){
var img=new Image();
img.src='http://wap.cmread.com/tingmedia//image/1/55/72.jpg';
img.onload=function () {
resolve(this);
}
img.onerror=function(){
reject('加载失败')
}
})
p.then(function (res) {
console.log('加载成功');
document.body.appendChild(res)
}).catch(function (error) {
console.log('加载失败'+error)
})
//封装异步处理对象
function loadImg(url) {
var promise=new Promise(function (resolve,reject) {
var img=new Image();
img.src=url;
img.onload=function () {
resolve(this)
};
img.onerror=function () {
reject('加载失败')
}
});
return promise
}
loadImg(imgs[0]).then(function (res) {
document.body.appendChild(res)
})
//二:静态方法
//Promise.all()能将多个promise对象包装成一个新的promise对象,
//当所有promise对象都返回resolve时候,Promise.all()才返回resolve,此时所有resolve组成一个数组,返回给then中的resolve
//如果有一个返回reject则返回reject,并且把这个rejec返回给Promise.all的reject
var allDone=Promise.all([loadImg(imgs[0]),loadImg(imgs[1]),loadImg(imgs[2])]) //P要大写
allDone.then(function (res) {
res.forEach(function (item,index) { //很多时候这个顺序不能错
document.write(index);
document.body.appendChild(item)
})
})
//Promise.resolve()
//如果参数是promise对象则原封不动的返回promise对象
Promise.resolve(loadImg(imgs[0])).then(function (res) {
console.log(111);
document.body.appendChild(res)
})
//如果参数是对象,则立即会把这个对象变成promise对象,然后执行then方法
Promise.resolve({
then(resolve,reject){
const img=new Image();
img.src=imgs[0];
img.onload=function () {
resolve(this)
}
}
}).then(function(res){
document.body.appendChild(res);
console.log(222)
})
Promise异步编程解决方案的更多相关文章
- node.js异步编程解决方案之Promise用法
node.js异步编程解决方案之Promise var dbBase = require('../db/db_base'); var school_info_db = require('../db/s ...
- ES6笔记(7)-- Promise异步编程
系列文章 -- ES6笔记系列 很久很久以前,在做Node.js聊天室,使用MongoDB数据服务的时候就遇到了多重回调嵌套导致代码混乱的问题. JS异步编程有利有弊,Promise的出现,改善了这一 ...
- JavaScript异步编程解决方案探究
javascript的天生单线程特性,使得异步编程对它异常重要,早期的通常做法是用回调函数来解决.但是随着逻辑的复杂,和javascript在服务端的大显神通,使得我们很容易就陷入“回调陷井”的万丈深 ...
- ES6入门八:Promise异步编程与模拟实现源码
Promise的基本使用入门: ——实例化promise对象与注册回调 ——宏任务与微任务的执行顺序 ——then方法的链式调用与抛出错误(throw new Error) ——链式调用的返回值与传值 ...
- 学习Promise异步编程
JavaScript引擎建立在单线程事件循环的概念上.单线程( Single-threaded )意味着同一时刻只能执行一段代码.所以引擎无须留意那些"可能"运行的代码.代码会被放 ...
- promise异步编程的原理
一.起源 JavaScript中的异步由来已久,不论是定时函数,事件处理函数还是ajax异步加载都是异步编程的一种形式,我们现在以nodejs中异步读取文件为例来编写一个传统意义的异步函数: var ...
- nodejs学习笔记 —— 异步编程解决方案
在js或者node编程中,由于异步的频繁和广度使用,使得回调和嵌套的深度导致编程的体验遇到一些挑战,如果写出优雅和好看的代码,本文主要针对异步编程的主流方案做一些总结 1.事件发布/订阅模式 事件监听 ...
- async/await actor promise 异步编程
Python协程:从yield/send到async/await http://blog.guoyb.com/2016/07/03/python-coroutine/ Async/Await替代Pro ...
- Func-Chain.js 另一种思路的javascript异步编程解决方案
本文转载自:https://www.ctolib.com/panruiplay-func-chain.html Func-Chain.js 另一种思路的javascript异步编程,用于解决老式的回调 ...
随机推荐
- ThreadLocal使用原理、注意问题、使用场景
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理.首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码 ...
- Web项目性能测试结果分析
1.测试结果分析 LoadRunner性能测试结果分析是个复杂的过程,通常可以从结果摘要.并发数.平均事务响应时间.每秒点击数.业务成功率.系统资源.网页细分图.Web服务器资源.数据库服务器资源等几 ...
- spring源码深度解析— IOC 之 默认标签解析(上)
概述 接前两篇文章 spring源码深度解析—Spring的整体架构和环境搭建 和 spring源码深度解析— IOC 之 容器的基本实现 本文主要研究Spring标签的解析,Spring的标签 ...
- Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- Java---使用EWS读取exchange邮件
第一步: 下载EWS API相关包: 从如下路径下载EWS API包:http://code.msdn.microsoft.com/Exchange-EWS-Java-API-12-1a5a1143 ...
- 【Netty4】深入学习Netty
Netty is an asynchronous event-driven network application framework for rapid development of mainta ...
- 使用回调的方式实现中间件-laravel
$app = function ($request) { echo $request . "\n"; return "项目运行中....."; }; // 现在 ...
- T4生成实体和简单的CRUD操作
主要跟大家交流下T4,我这里针对的是mysql,我本人比较喜欢用mysql,所以语法针对mysql,所以你要准备mysql的DLL了,同理sqlserver差不多,有兴趣可以自己写写,首先网上找了一个 ...
- esxi开启SSH
- Effective Java - 静态方法与构造器
目录 用静态工厂方法替代构造器? 静态工厂有名称 静态工厂不必重新创建一个对象 静态工厂可以返回任何子类型对象 静态工厂返回的类可以动态变化 静态工厂返回的类可以不存在 静态工厂方法的缺点 静态工厂方 ...