Coffeescript重试循环不起作用
Coffeescript retry loop doesn't work
我有一个这样的循环,如果ajax请求成功,它应该返回并退出循环,它也应该只重试10次,但它只是迭代循环10次,然后在请求成功时停止。
retryCount = 0
while (retryCount < 10)
$.ajax
type: "GET"
url: "http://" + proxyURL + "?"
dataType: "jsonp"
data:
url:
url + "?" + method + "&" + $.param
parameters: JSON.stringify parameters
success: (response) ->
data = response
console.log "----------"
console.log "METHOD: " + method
console.log parameters
console.log data
console.log "----------"
if data.contents.fault
if data.contents.fault.code is 256
console.log "fetching new token (" + retryCount + ")"
fetchNewToken ->
return callback(data.contents.result)
else
console.log "ERROR: " + $.trim(data.contents.fault.message)
if data.contents.result
if data.contents.result instanceof Array
if data.contents.result.length > 0
return callback(data.contents.result)
else
return callback(data.contents.result)
else
console.log "retrying " + method + " (" + retryCount + ")"
retryCount++
看来你没有理解异步编程的概念。
结果如下:
retryCount = 0
# TIMESTAMP 0
while (retryCount < 10)
# TIMESTAMP 1, 3, 5, ...
$.ajax
url: "http://" + proxyURL + "?"
dataType: "jsonp"
success: (response) ->
#TIMESTAMP very later, long after your loop is through
# TIMESTAMP 2, 4, 6, ...
retryCount++
它应该看起来像这样(只是一个例子,有点伪代码):
retryCount = 0
loadData = (retryCount, callBack, errorCallBack) ->
$.ajax
url: "asdasdasd"
success: () ->
callBack someDataYouRecieved
error: () ->
retryCount++
if retryCount is 10
errorCallBack "got 10 errors"
else
loadData retryCount, callBack
loadData retryCount, successHandler, errorHandler
如果我理解正确的话,这样的结构应该可以达到这个目的(省略了特定于领域的部分):
MAX_RETRIES = 10
issueRequestWithRetries = (request, retries=0) ->
request.success = (response) ->
# do something, then find out that you need to retry
if retries < MAX_RETRIES
issueRequestWithRetries(request, retries+1)
else
# handle the error
$.ajax request
# sample usage
issueRequestWithRetries
type: "GET"
url: "http://" + proxyURL + "?"
dataType: "jsonp"
data: {} # real data
相关文章:
- 我的javascript for循环不起作用
- javascript for循环不起作用
- 循环通过数组的If语句不起作用
- 为什么我的While循环不起作用
- JS(node.js)而循环不起作用
- 来自MDN的循环示例的JavaScript不起作用
- Mustache.js每个循环都不起作用
- for循环中的jquery.load()不起作用
- For循环与数组不起作用
- JavaScript For循环与For in不起作用
- 为什么我所有的循环都不起作用
- JavaScript 数组/循环不起作用
- Javascript if-else循环不起作用
- 循环浏览页面上所有选中的复选框并将id拉入数组不起作用
- JavaScript的循环问题,将值插入数组将不起作用
- Javascript getElementsByName在PHP循环中不起作用
- Javascript循环数组无限不起作用
- 如果循环停止并且不起作用
- if-else循环和jquery在热应用程序或冷应用程序中不起作用
- 循环变量的Javascript不起作用