我应该如何在JavaScript中一个接一个地执行函数?

时间:2015-06-23 08:58:04

标签: javascript asynchronous synchronous

我正在尝试制作时间转换工具,首先它会获取您输入的两个城市的坐标,然后相应地计算时间。

但我遇到的问题是获取坐标的函数需要一些时间,并且它也是异步的,因此执行顺序存在问题。

有没有办法可以确保在上一次完成之后执行下一个语句?

library("scales")
library(ggplot2)
reverselog_trans <- function(base = exp(1)) {
  trans <- function(x) -log(x, base)
  inv <- function(x) base^(-x)
  trans_new(paste0("reverselog-", format(base)), trans, inv, 
            log_breaks(base = base), 
            domain = c(1e-100, Inf))
}

set.seed(12345)
test=rnorm(20,1000,5000)
n<-ceiling(max(test))
qplot(1:n, ecdf(test)(1:n), geom="point",xlab="check-ins", 
      ylab="Pr(X>=x)")+ geom_step()+  
scale_x_continuous(trans=reverselog_trans(10), breaks = c(10000,1000,100,10,1))

您可以在github上查看整个代码: https://github.com/udit96rc/TimeConverter

您可以在此处查看该工具:http://uditchugh.me/pt

1 个答案:

答案 0 :(得分:1)

getCoordinates中,您通过geocoder.geocode()电话对Google API使用异步请求。此方法中的第二个参数是在请求完成时执行的实际回调。将自己的回调函数传递给getCoordinates函数(作为第二个参数),并在实际请求完成处理后调用它。

function getCoordinates(city, callback) {
   ...

   geocoder.geocode({ address: address }, function(results, status) {
       ...
       if (typeof callback === 'function')
           callback();
   });
}

getCoordinates(cityOneString, function() {
    getCoordinates(cityTwoString);
});