Back

es6 - promise的基本用法 (关键在于 new Promise()中的resolve方法,)

发布时间: 2018-12-24 06:48:00

参考: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  

Back