firemail

标题: Promise用法 [打印本页]

作者: hechengjin    时间: 2016-3-26 17:01
标题: Promise用法
  1. 'use strict'

  2. let Deferred = function () {
  3.   this.promise = new Promise((resolve, reject) => {
  4.     this.resolve = resolve
  5.     this.reject = reject
  6.   })

  7.   this.promise.canceled = false
  8.   this.promise.cancelers = []
  9.   this.promise.cancel = () => {
  10.     this.promise.canceled = true
  11.     for (let canceler of this.promise.cancelers) {
  12.       try {
  13.         canceler()
  14.       } catch (e) {
  15.         console.log(e + e.stack)
  16.       }
  17.     }
  18.   }
  19.   this.then = this.promise.then.bind(this.promise)
  20.   this.catch = this.promise.catch.bind(this.promise)
  21. }

  22. exports.defer = () => new Deferred()
复制代码
第一次查询

let loadListDeferred = defer()
执行查询
loadListDeferred.then(() => {
    查询结果清除  ----这里在执行第二次查询时才会执行到
  })


第二次查询
if (oadListDeferred) {
   loadListDeferred.resolve()   ----触发上面的then操作
  }


作者: hechengjin    时间: 2016-4-15 12:11
let loadDeferred = defer()
let finished = false

  spawn(function * () {
    while (true) {
      console.log('777777777777777')
      // yield WinJS.Promise.any([sleep(1000), loadDeferred])
      yield sleep(1000)
      loadDeferred.then(() => {
        finished = true
      })
      if (finished) {
        break
      }
    }
  })

  top.tryCloseWindow = DoCommandClose.bind(top)

function DoCommandClose () {
  let ret = false
  loadDeferred.resolve()
  console.log('=======================')
  top.close()
  return ret
}






欢迎光临 firemail (http://www.firemail.wang:8088/) Powered by Discuz! X3