我知道我可以將調用設置爲同步,或者在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循環或什麼? –
「異步或真實」不會總是評估爲「真」嗎? –