Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1964|回复: 1
打印 上一主题 下一主题

Promise用法

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2016-3-26 17:01:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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操作
  }

回复

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
沙发
 楼主| 发表于 2016-4-15 12:11:18 | 只看该作者
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
}

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-4-26 19:37 , Processed in 0.055277 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表