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异步编程,用于解决老式的回调 ...
随机推荐
- spring源码深度解析— IOC 之 容器的基本实现
概述 上一篇我们搭建完Spring源码阅读环境,spring源码深度解析—Spring的整体架构和环境搭建 这篇我们开始真正的阅读Spring的源码,分析spring的源码之前我们先来简单回顾下spr ...
- HBase 学习之路(五)——HBase常用 Shell 命令
一.基本命令 打开Hbase Shell: # hbase shell 1.1 获取帮助 # 获取帮助 help # 获取命令的详细信息 help 'status' 1.2 查看服务器状态 statu ...
- Centos7安装Typecho详细教程
Centos7安装Typecho详细教程 首先搭建LAMPH环境 L linux 服务器(centos或者ubunt) .A Apache .M mysql .P PHP 安装Apache.PHP ...
- 汇编入门二 一些概念与PC组件
1.内存:想让CPU工作,必须提供指令与数据,而指令和数据存在于内存中. 2.指令和数据:有点抽象,上书(汇编语言 第二版): 3.存储单元:存储器(内存)被划分为多个存储单元,内个存储单元从0开始顺 ...
- Mac和Windows以及Linux上WingIDE Pro激活
写这篇文章的原因,主要是网上的很多激活方式都不适用最新版的软件.要么要你付费下载别人破解好的内容,要么各种文章你抄我,我抄你,根本没有自己实践过. 本篇文章合适Mac.Windows.Linux平台, ...
- NMI watchdog: BUG: soft lockup - CPU#0 stuck for 22s!
今天测试环境一虚拟机运行中突然报错,,, 没见过的内核报错,于是google一番. 系统日志: Nov :: dev- kernel: NMI watchdog: BUG: soft lockup - ...
- python数据库-MySQL查询基本操作(50)
一.条件查询 1.使用where子句对表中的数据筛选,结果为true的行会出现在结果集中 select * from 表名 where 条件; 2.比较运算符 等于= 大于> 大于等于>= ...
- 模块(二)os hashlib
模块(二)os hashlib 1.序列化模块 1.1 json 将满足条件的数据结构转化成特殊的字符串,并且可以反序列化转回去 # 两对方法 # 1 dumps() loads() ## 多用于网络 ...
- 解决webpack打包速度慢的解决办法
技巧1 webpack在打包的时候第一次总是会做很长的准备工作,包括加载插件之类的.在刚接触webpack的时候总是webpack一下-测一下-改一下-再webpack一下,这种方式最后让很多人崩溃了 ...
- Lockey的沙雕低错集锦(未完待续~自己提升用)
(嘿嘿 (^~ ^)) 1. bitset<2100>a[2100] a[x]|=(1<<x) (1<=x<=2100) 使用时忘了x的范围,额,应 ...