Promise用法例子
2016-04-19 17:29
323 查看
注意:要想then方法能链式的执行下去,必须返回Promise对象!!!
'use strict'; function async(value) { return new Promise(function(resolve, reject) { var ms = Math.round(Math.random() * 1000); setTimeout(function() { console.log('waiting ' + ms + 'ms'); // 等待ms毫秒 resolve(value + ms); }, ms); }); } // 每次执行随机等待n毫秒,结果统计总毫秒数 async(0) .then(async) .then(async) .then(async) .then(async) .then(function(value) { console.log('------total wait:' + value + 'ms'); }); //////////////////////////////////////////////////////////// function async1(value) { return new Promise(function(resolve, reject) { resolve(value + 1); }); } function async2(value) { // return new Promise(function(resolve, reject) { // resolve(value + 2); // }); // 等价与上面写法 return Promise.resolve(value + 2); } function async3(value) { return new Promise(function(resolve, reject) { resolve(value + 3); }); } async1(100).then(async2).then(async3).then(function(value) { console.log('------' + value); }); ///////////////////////////////////////////////////////////////// function say() { var value = 'what'; return Promise.resolve(value); } say().then(function(value) { value = value + ' are'; return Promise.resolve(value); }).then(function(value) { value = value + ' you'; return Promise.resolve(value); }).then(function(value) { value = value + ' doing'; return Promise.resolve(value); //return Promise.reject('error, exit'); // 中途退出 }).then(function(value) { value = value + ' now!'; return Promise.resolve(value); }).then(function(value) { console.log('------' + value); }).catch(function(error) { console.log('------' + error); });
<html> <head> <title>Ball move</title> <style type="text/css"> .ball { width: 40px; height: 40px; border-radius: 20px; margin-left: 10px; } .ball1 { background: #ff0000; } .ball2 { background: #00ff00; } .ball3 { background: #0000ff; } </style> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> </head> <body> <div class="ball ball1"></div> <div class="ball ball2"></div> <div class="ball ball3"></div> <script type="text/javascript"> function moving(ball, pos) { return new Promise(function(resolve, reject) { var marginLeft = parseInt(ball.css('margin-left')); if (marginLeft != pos) { var timerId = setInterval(function() { marginLeft = marginLeft + 1; ball.css('margin-left', marginLeft); if (marginLeft == pos) { clearInterval(timerId); resolve(); } }, 20); } else { resolve(); } }); } moving($('.ball1'), 100).then(function() { return moving($('.ball2'), 150); }).then(function() { return moving($('.ball3'), 200); }); </script> </body> </html>
相关文章推荐
- BZOJ4538 HNOI2016 网络
- 第八周项目1—数组做数据成员(多文件)
- Oracle Study之-AIX6.1构建Oracle 11gR2 RAC(2)
- 在MATLAB和OpenCV环境下写的灰度图像分段线性变换源码!
- Connection reset by peer的常见原因
- 【拾遗】C++申请动态连续内存的二维数组
- 算法Sedgewick第四版-第1章基础-014一用stack把前置表达式转为后置表达式并计算值
- Regionals 2012 :: Chengdu
- d3中选择器后的enter()
- Views Relevant to Oracle Data Guard
- 配置apache的虚拟主机
- 算法训练 单词接龙
- 安卓探究ListView+Adapter数据在工作线程中更新引发的crash以及解决方法(三)
- EventBus3.0源码分析
- C#笔记一 .Net Framwork
- mybaits不能出现小于号
- foreach的实现原理
- sinatra - Ruby web application 轻量级框架
- studio 集成 Genymotion后打开模拟器出错、打开虚拟机VirtualBox出错
- ArrayList(一): JAVA中ArrayList类的用法