这似乎是滥用承诺或“你做错了”的问题,如果有的话请纠正我。 我遇到了几个想要同步默认在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方法中等待,直到承诺得到解决,然后才返回?
答案 0 :(得分:1)
正如您已经猜到的,这不是一个好主意。 Javascript开发完全是关于思考和异步工作,因此您的服务的客户端应该暴露给Promises的API。我认为这是一个公平的要求,因为承诺是一个易于理解的概念,可以学习简化异步编程。
答案 1 :(得分:1)
这意味着调用者需要知道返回了一个承诺
调用者显然总是需要知道他们调用的函数返回什么,甚至需要知道什么参数。所以你这里没有问题。