如何让ahoy的javascript异步函数跟踪同步

时间:2015-04-28 10:18:35

标签: javascript ruby-on-rails asynchronous gem ahoy

我有一些代码调用这样的函数:

function trackPDFSEClicks(){
        ahoy.track("Viewed Job Spec", {title: "Viewed Software Engineer Job Spec"});
        window.location.href = "/Software Engineer.pdf";
    }

但是因为此跟踪调用是异步的 - 有时它在加载PDF之前无法完成 - 因此不会跟踪事件。

我不一定要在控制器中去处理这个跟踪,因为如果可能的话,使用这个方法对我来说会更简单 - 所以有什么办法可以强迫这个ahoy.track调用运行同步?

1 个答案:

答案 0 :(得分:1)

我决定在apneadiving的洞察力只是在我的控制器中为每个可下载的链接创建一个动作 - 并使用了来自ahoy的rails API和rails AM.value("DB_URL","https://myfirebase.firebaseio.com/"); AM.factory("DB", ["DB_URL", function(DB_URL) { var db = new Firebase(DB_URL); return db; } ]); AM.factory("Orders", ["$firebaseArray", "DB","Auth","$firebaseObject","$log", function($firebaseArray,DB,Auth,$firebaseObject,$log) { $log.debug("Fetching Orders"); var authData = Auth.$getAuth(); var ordersRef = DB.child("users/" + authData.uid+"/orders/"); $log.debug("ordersRef = " + ordersRef); var Orders = $firebaseArray(ordersRef); return { getOrders: function() { return Orders; }, getOrder: function(orderId) { $log.debug("Order for id: " + orderId); var orderRef = ordersRef.child(orderId); $log.debug("orderRef = " + orderRef); var Order = $firebaseObject(orderRef); return Order; } }; } ]); 方法 - 这给了我那种我期待的行为。