我有一个像这样的 AMD 模块:
define ['backbone', 'jquery', 'someObj'], (Backbone, $, someObj) ->
class MyModel extends Backbone.Model
# some options
foo = new MyModel
bar = new MyModel
foo.fetch().done ->
# Here I want to do things with foo and bar now that the fetch is complete
# but they are not visible
# Backbone, $, someObj, and MyModel are all visible, however
为什么我可以访问对象 like someObj
,但不能访问foo
or bar
?另外,这不是模拟同步代码的正确方法吗?运行只能在承诺解决后才能运行的代码?本质上,我想:
- 实例化
foo
和bar
- 从服务器获取
foo
和/或bar
- 做所有需要等待获取
foo
的事情bar
似乎 done 可以包含通用的操作(例如console.log "Done"
)或仅访问从承诺传递给它的参数。我想我需要使用不同的闭包结构或其他东西,但我只是对如何做我想做的事一无所知。(我不确定这是否只是我正在经历的事情,因为我在 AMD 模块中,所以我也用 RequireJS 标记它)。