我知道我可以将调用设置为同步,或者在complete()回调中包装所有内容,但它看起来不够优雅。这里就是我的了:在方法返回之前等待ajax完成
_loadShader: (url) ->
(@_loadResource url, false).complete (e) ->
vert = e.responseText.split '[Vertex shader]'
frag = vert[1].split '[Fragment shader]'
vertex: frag[0]
fragment: frag[1]
_loadResource: (url, async) ->
url = 'Public/' + url
$.ajax
url: url
dataType: 'text'
async: async or true
complete:
@
_loadShader()返回XHR对象,但我真正想要的是,它不返回,直到完成()被炒鱿鱼 - 即使这意味着锁定浏览器。我对结果的处理很重要,我不想开始用回调包装我的代码。
编辑:重新吉格舞到这一点,不正是我后:
_loadShader: (url, e) ->
result = @_loadResource url, false
vert = result.split '[Vertex shader]'
frag = vert[1].split '[Fragment shader]'
shader =
vertex: frag[0]
fragment: frag[1]
_loadResource: (url, async = true) ->
url = 'Public/' + url
xhr = $.ajax
url: url
dataType: 'text'
async: async
return xhr.responseText
所以,你要同步Ajax调用,但不希望设置'async'假? –
不,我很好,把它设置为false,但我不能阻止_loadShader()返回 - 我应该坚持它在一个while循环或什么? –
“异步或真实”不会总是评估为“真”吗? –