Using promises
【Using promises】
过去,异步方法这样写:
- function successCallback(result) {
- console.log("It succeeded with " + result);
- }
- function failureCallback(error) {
- console.log("It failed with " + error);
- }
- doSomething(successCallback, failureCallback);
使用promise后,异步方法这样写:
- let promise = doSomething();
- promise.then(successCallback, failureCallback);
promise模式有以下几个好处:
1、回调方法永远在下一帧后才会调用。即使当前帧已完成。
2、可以通过串连.then,设置多个回调。
promise模式可以用于解决死亡金字塔问题:
- doSomething(function(result) {
- doSomethingElse(result, function(newResult) {
- doThirdThing(newResult, function(finalResult) {
- console.log('Got the final result: ' + finalResult);
- }, failureCallback);
- }, failureCallback);
- }, failureCallback);
- doSomething().then(function(result) {
- return doSomethingElse(result);
- })
- .then(function(newResult) {
- return doThirdThing(newResult);
- })
- .then(function(finalResult) {
- console.log('Got the final result: ' + finalResult);
- })
- .catch(failureCallback);
catch(failureCallback)
是 then(null, failureCallback) 的简单写法
使用new Promise((resolve, reject)=>{})创建 Promise。Basically, the promise constructor takes an executor function that lets us resolve or reject a promise manually
- const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
- wait(10000).then(() => saySomething("10 seconds")).catch(failureCallback);
- new Promise((resolve, reject) => {
- console.log('Initial');
- resolve();
- })
- .then(() => {
- throw new Error('Something failed');
- console.log('Do this');
- })
- .catch(() => {
- console.log('Do that');
- })
- .then(() => {
- console.log('Do this whatever happened before');
- });
Promise.resolve()
and Promise.reject()
are shortcuts to manually create an already resolved or rejected promise respectively
以下两段代码均为reduce应用。用于串于执行异步或同步调用。
- [func1, func2].reduce((p, f) => p.then(f), Promise.resolve());
- Promise.resolve().then(func1).then(func2);
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises
Using promises的更多相关文章
- Christmas Trees, Promises和Event Emitters
今天有同事问我下面这段代码是什么意思: var MyClass = function() { events.EventEmitter.call(this); // 这行是什么意思? }; util.i ...
- JavaScript中Promises/A+规范的实现
Promises是一种异步编程模型,通过一组API来规范化异步操作,这样也能够让异步操作的流程控制更加容易. 下面的代码是假设执行一个异步队列,每一项都会使用上一项返回的数据: function ne ...
- CommonJS Promises/A规范
本文来自四火哥的翻译 CommonJS是一组javascript编程规范,而promise是其中之一. 简而言之,promises是一种令代码的异步行为变得更加优雅的软件抽象.在基本的定义中,代码可能 ...
- We have a problem with promises
原文地址:http://fex.baidu.com/blog/2015/07/we-have-a-problem-with-promises/ 用Javascript的小伙伴们,是时候承认了,关于 p ...
- Jasmine测试ng Promises - Provide and Spy
jasmine提供了很多些很实用的处理Promises的方法,首先我们来考虑下面的这个例子: angular.module("myApp.store").controller(&q ...
- 异步编程之Javascript Promises 规范介绍
什么是 Promises Promises是一种关于异步编程的规范,目的是将异步处理对象和处理规则进行规范化,为异步编程提供统一接口. 传统的回调函数 说到JavaScript的异步编程处理,通常我们 ...
- JS魔法堂:剖析源码理解Promises/A规范
一.前言 Promises/A是由CommonJS组织制定的异步模式编程规范,有不少库已根据该规范及后来经改进的Promises/A+规范提供了实现 如Q, Bluebird, when, rsvp. ...
- node.js下when.js(Promises/A)的实践
假设一个业务场景: 通过rss地址,获取rss并保存于文件,rss地址保存于文件中. 完成该场景的业务需要完成3个任务: 1.从文件中读取rss地址. 2.获取rss. 3.保存于文件. 最后将这三个 ...
- 使用 Promises 编写更优雅的 JavaScript 代码
你可能已经无意中听说过 Promises,很多人都在讨论它,使用它,但你不知道为什么它们如此特别.难道你不能使用回调么?有什么了特别的?在本文中,我们一起来看看 Promises 是什么以及如何使用它 ...
- Scala 并行和并发编程-Futures 和 Promises【翻译】
官网地址 本文内容 简介 Futures 阻塞 异常 Promises 工具 最近看了<七周七语言:理解多种编程泛型>,介绍了七种语言(四种编程范型)的主要特性:基本语法,集合,并行/并发 ...
随机推荐
- rsyncd
rsync是一个快速.通用的文件复制工具.支持两种工作模式:基于shell的传输.基于服务的传输.1.配置文件 rsyncd.conf文件由模块及其参数构成.模块由方括号包裹模块名称,直到下一个模块结 ...
- C# Microsoft.Office.Interop.Excel.ApplicationClass 加载类型库/DLL 时出错
问题 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Intero ...
- 《算法》第五章部分程序 part 5
▶ 书中第五章部分程序,包括在加上自己补充的代码,Knuth-Morris-Pratt 无回溯匹配,Boyer - Moore 无回溯匹配,Rabin - Karp 指纹匹配 ● Knuth-Morr ...
- django之ForNode是如何渲染的
django的模板编译后变成一般text.tag.varible,然后根据上下文进行渲染. class ForNode(Node): child_nodelists = ('nodelist_l ...
- Nginx 设置负载均衡
1. 在nginx配置文件目录下另外单独创建一个文件用于管理负载均衡配置,这里起名为 fzjh.conf vim /etc/nginx/fzjh.conf #在文件下添加以下内容 upstream m ...
- PC浏览器播放m3u8
HLS(HTTP Live Streaming)是苹果公司针对iPhone.iPod.iTouch和iPad等移动设备而开发的基于HTTP协议的流媒体解决方案.在 HLS 技术中 Web 服务器向客户 ...
- [uwsgi: command not found]
问题: pip install uwsgi 之后,运行uwsgi 报错:[uwsgi: command not found] 解决方案:建立软链接 ln -s /usr/local/python3/b ...
- Mysql索引,有哪几种索引,什么时候该(不该)建索引;SQL怎么进行优化以及SQL关键字的执行顺序
索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 1.按照索引列值的唯一性,索引可分为唯一索引和非唯一索引 非唯一索引:B树索引 crea ...
- linux配置sphinx
1. 配置索引 cd /usr/local/sphinx/etc/ cp sphinx.conf.dist sphinx.conf //备份配置文件,防止改错 vim sphinx.conf 配置文件 ...
- day38-常见第三方模块
1.requests模块 2.psutil模块 3.xlrd模块 4.xlwt模块 5.Paramiko模块