在Ember.js中同步promises

时间:2014-01-14 12:06:57

标签: ember.js coffeescript ember-data promise synchronous

这似乎是滥用承诺或“你做错了”的问题,如果有的话请纠正我。 我遇到了几个想要同步默认在Ember.js中是异步的调用的点。这是一个小例子:

class service extends Ember.Object
  someProperty: null

  doSomething: ->
    #this.store was injected during initialisation
    this.store.find("someModel", someSelector).then((result) =>
      @someProperty = result.someField
      console.log "promise fulfilled"
  )

调用以下代码:

service.doSomething()
console.log "this should be second"

将导致:

"this should be second"
"promise fulfilled"

这意味着如果有人调用该方法并且在调用返回后期望设置someProperty属性,则情况并非如此。同步的唯一方法是将其称为“service.doSomething()。then( - > ....)”。这意味着调用者需要知道返回了一个承诺。

有没有办法在doSomething方法中等待,直到承诺得到解决,然后才返回?

2 个答案:

答案 0 :(得分:1)

正如您已经猜到的,这不是一个好主意。 Javascript开发完全是关于思考和异步工作,因此您的服务的客户端应该暴露给Promises的API。我认为这是一个公平的要求,因为承诺是一个易于理解的概念,可以学习简化异步编程。

答案 1 :(得分:1)

  

这意味着调用者需要知道返回了一个承诺

调用者显然总是需要知道他们调用的函数返回什么,甚至需要知道什么参数。所以你这里没有问题。