es6 - promise的基本用法 (关键在于 new Promise()中的resolve方法,)
访问量: 1368
参考:http://es6.ruanyifeng.com/#docs/promise
和 https://segmentfault.com/a/1190000007535316
Promise, then 是一种句式, 用来做一些比较耗时的异步操作。例如:
new Promise(发送http请求 ).then( 处理返回的response).fail(如果失败了该怎么操作)
我们先看一个例子, promise 是如何被声名和调用的。
安装好node 之后, node 会自动支持es6 的语法。我们直接创建一个 test.js 文件,然后直接 node test.js 即可
my_promise = new Promise(function(resolve, reject){ console.info("== in promise") // 如果该promise 操作成功的话, let result = true //假设成功 if(result ){ // 运行成功对应的代码 resolve() }else{ // 运行失败对应的代码 reject() } console.info("== in the last line of promise") }) my_promise.then(function(){ console.info("== hi , I am resolve function") })
运行结果: (可以看出, promise 的 then函数被最后执行的)
$ node test_promise.js == in promise == in the last line of promise == hi , I am resolve function
promise的好处非常多。可以让代码非常简洁。
上面的代码,在es6 中也可以:
1. 把function() {} 写成 => {} 的形式
2. 只保留 promise(function(resolve)), 而不用 promise(function(resolve, error)) 这个形式。(算是省略了对错误的处理)
省略后的样子是这样的:
my_promise = new Promise((resolve) => { //... })
这个是重点:
Promise 有三种状态: resove (正常) , reject (出错) , pending ( 运行中)
let result = new Promise( (resolve, reject ) => { let result = 0 setTimeout( () => { console.info("sleep n ms...") result = 200 resolve(result) // 注意,这里的 resolve, 就相当于是返回了。 }, 3000) }) result.then( (temp) => { console.info("result : ", temp) })
上面代码返回:
sleep n ms...
(休息3000 ms之后)
result : 200