Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 绕过异步ajax获取_Javascript_Coffeescript - Fatal编程技术网

Javascript 绕过异步ajax获取

Javascript 绕过异步ajax获取,javascript,coffeescript,Javascript,Coffeescript,所以我有这个函数- IPGeocoding = (data) -> coords = [] finish = _.after(data.length, (coords) -> console.log coords return coords ) _.each(data, (datum) -> $.ajax( url: "http://freegeoip.net/json/#{da

所以我有这个函数-

    IPGeocoding = (data) ->
    coords = []
    finish = _.after(data.length, (coords) ->
      console.log coords
      return coords
    )
    _.each(data, (datum) ->
        $.ajax(
          url: "http://freegeoip.net/json/#{datum}"
          type: 'GET'
          success: (result) ->
            lat = result.latitude
            lon = result.longitude
            pair = [lat, lon]
            coords.push(pair)
            finish(coords)
        )
    )
它的名字是这样的

if @model.get('data')?
  if @model.get('func')?
    @points = @model.get('func')(@model.get('data'))
但是,@点未定义。我希望@points是运行console.log coords时的coords(它是一个长度一定的数组)。我使用了u.after,因为我想从多个异步调用的结果中构建coords


如何获得坐标?

您已将
回调
参数遗漏在
IPGeocoding
中。你应该这样做:

IPGeocoding = (data, callback) ->
  finish = _.after(data.length, callback)
  #...
然后你会像这样使用它:

IPGeocoding(data, (coords) ->
  # Do whatever needs to be done with `coords`
  # in here.
)
从:

之后
之后

创建函数的一个版本,该版本仅在第一次被调用count次后运行。用于对异步响应进行分组,您希望在继续之前确保所有异步调用都已完成

因此,
finish
调用在所有
$调用成功返回之前不会执行任何操作。然后,
callback
将使用最后的
coords
调用

还要注意,
coords
的顺序不能保证与
数据的顺序相匹配。如果需要维护顺序,则需要在
coords
中构建一个对象,而不是数组,然后在最后重新排序。假设
datum
是一个简单的标量,您可以这样做:

coords = { }
finish = _.after(data.length, (coords) ->
  in_order = (coords[datum] for datum in data)
  callback(in_order)
)

然后在
success
处理程序中,你会说
coords[datum]=pair
而不是
coords.push(pair)

我不明白你想做什么@积分不是你的功能。那么,为什么它被定义与否很重要呢?我不知道你的前半部分代码与后半部分代码有什么关系?另外,我不知道您正在使用哪个框架,但是如果您试图检索
coords
,那么
get
必须支持异步模式。