Promise

var promise = new Promise((resolve,reject)=>{
resolve(value);
//reject(value)
});
//promise的状态由内部是否执行resolve(),reject(),或者报错决定
promise.then(value=>{
return value //等价于return Promise.resolve(value) 此时状态由pendding变为resolved
//return new Promise((resolve,reject)=>{}) 如果此时内部未执行resolve(),reject(),或者报错,promise.then返回的对象就是pendding状态
})
//这个方法返回一个promise对象,这个对象和promise不相等,这个promise的状态,由return决定
//如果return的是一个值,或者没有return(返回的是undefined),此时状态由pendding变为resolved var promise = new Promise((resolve,reject)=>{
console.log(1);
resolve();
});
promise.then(()=>{
return Promise.all[new Promise(
(resolve,reject)=>{
console.log(2)
resolve();
}
),new Promise(
(resolve,reject)=>{
console.log(3)
resolve();
}
)]
}).then(()=>{
console.log(4)
})
promise.then(()=>console.log('end'))
// 1 2 3 end 4 1 2 3 end返回的promise都是基于 promise的,4基于的是promise.then(),事件队列的排列顺序是1,2,3,end,4
async function logInOrder(urls) {
// 并发读取远程URL
const textPromises = urls.map(url => {
return function(){
return new Promise((reslove)=>{
setTimeout(()=>reslove(url),1000);
});
};
});
let reslt=[];
// 按次序输出
for (const textPromise of textPromises) {
reslt.push(await textPromise());//此时才执行new Promise,执行定时器,await没有返回结果是不会执行后面的console.log的
console.log(reslt);
}
}

async

async function logInOrder(urls) {
// 并发读取远程URL
const textPromises = urls.map(url => {
return new Promise((reslove)=>{
setTimeout(()=>reslove(url),1000);
});
});
let reslt=[];
// 按次序输出
for (const textPromise of textPromises) {
reslt.push(await textPromise);//在map(非常快)的时候定时器已经开启,await只是等待resolve的执行,恰好遍历的定时器时间一样,并行打印
console.log(reslt);
}
} var promise = new Promise((resolve,reject)=>{
resolve(url1);
});
if(false){ //或者true,可以用promise赋值的方式将新的promise的结果传给下面的then
promise = promise.then(value=>{
return new Promise((resolve)=>{
resolve(url2)
})
})
}
promise.then((value)=>{ })

扩展我自己写的一个Promise.props方法

// 直接在构造方法上定义静态方法
Promise.props = function(obj) {
if (typeof obj !== 'object') return new Promise((resolve)=>resolve(obj));
let keys = Object.keys(obj);
return Promise.all(keys.map(item=>obj[item])).then((value) => {
let foo={};
value.forEach((v,i)=>foo[keys[i]] = v);
return foo
});
}
Promise.props({
a: new Promise((resolve) => {
setTimeout(() => resolve(123), 1000)
}),
b: new Promise((resolve) => {
setTimeout(() => resolve(456), 1000)
})
}).then(value => console.log(value.a, value.b))

对es6中Promise和async的理解的更多相关文章

  1. ES6中Promise对象个人理解

    Promise是ES6原生提供的一个用来传递异步消息的对象.它减少了传统ajax金字塔回调,可以将异步操作以同步操作的流程表达出来使得代码维护和可读性方面好很多. Promise的状态: 既然是用来传 ...

  2. 对于ES6中Promise的个人见解

    1.js中常见的异步 JavaScript可以响应用户的一些异步交互,比如单击鼠标和按键盘等操作. let button = document.getElementById("btn&quo ...

  3. 关于ES6的Promise的使用深入理解

    ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...

  4. ES6中promise的使用方法

    先看看ES5中异步编程的使用. let ajax = function (callBlack) { setTimeout(function () { callBlack && call ...

  5. ES6中promise总结

    一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ...

  6. ES6中的class类的理解

    传统的javascript中只有对象,没有类的概念.它是基于原型的面向对象语言.原型对象特点就是将自身的属性共享给新对象.这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!非常容易让人 ...

  7. 阿里前端测试题--关于ES6中Promise函数的理解与应用

    今天做了阿里前端的笔试题目,原题目是这样的 //实现mergePromise函数,把传进去的数组顺序先后执行,//并且把返回的数据先后放到数组data中 const timeout = ms => ...

  8. ES6 中 Promise

    在说Promise之前我们先简单说一下什么是同步异步? 同步(Sync):所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 异步(Async):异步与同步相对, ...

  9. ES6中Promise的入门(结合例子)

    一.Promise的前言 解决回调地狱 //以往回调方式 函数1(function(){ //代码执行...(ajax1) 函数2(function(){ //代码执行...(ajax2) 函数3(f ...

随机推荐

  1. cglib代理

    简介: github地址:https://github.com/cglib/cglib,可以访问这个地址查看cglib源码和相关文档. 简单的摘录了wiki上关于cglib的描述: cglib is ...

  2. QT_FORWARD_DECLARE_CLASS

    相当于class 类名. 那么他和#include 包含头文件有什么区别呢 首先我们为什么要包括头文件问题的回答很简单通常是我们需要获得某个类型的定义(definition).那么接下来的问题 ...

  3. JSON依赖的选择

    json-lib 源码:https://github.com/aalmiray/Json-lib/ 最新版本:2.4 不再更新 <dependency> <groupId>ne ...

  4. (一) .net core 2.0 初体验

    1..net core 2.0环境 .net core 下载地址:https://www.microsoft.com/net/core#windowscmd 问题一:提示[Failed to load ...

  5. [ASP.NET教程] 防止表单重复提交

    第一种方法:javascript控制.缺点,一般用户使用没问题,但是懂点js的还是可以强行重复提交.而且,后退再提交,你也没啥办法.第二种方法:服务器控制.后台生成一个token,存入session或 ...

  6. 我的第一个python web开发框架(6)——第一个Hello World

    小白中午听完老菜讲的那些话后一直在思考,可想来想去还是一头雾水,晕晕呼呼的一知半解,到最后还是想不明白,心想:老大讲的太高深了,只能听懂一半半,看来只能先记下来,将明白的先做,不明白的等以后遇到再学. ...

  7. http://zthdd.bokee.com/6189963.html

    http://zthdd.bokee.com/6189963.html先保存

  8. MVC中重写RoleProvider角色管理

    /* 数据表SQL脚本 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_UsersInRoles_Ro ...

  9. 面试题:Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  10. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...