如何将异步调用中的数据插入到 push 方法中

How to insert data from async call into push method

我是 https://github.com/jackspirou/clientjs. It creates fingerprint of user visiting my site. I am also user of Piwik, open source analytic tool. I'm trying to implement one of its feature - http://developer.piwik.org/guides/tracking-javascript-guide#user-id 的用户。

我的代码如下:

var client = new ClientJS();
var fingerprint = client.getFingerprint();

var _paq = _paq || [];
_paq.push(['setUserId', fingerprint]);
_paq.push(['trackPageView']);

而且它不起作用。上面的代码插入到我的数据库中的数据是 "NULL" 的 UserID 字段。这可能是 getFingerprint() 异步的问题。我的问题是 - 如何绕过它?

您必须查看 client.getFingerprint() 文档。很可能是这样的:

client.getFingerprint(function(result, err) {
    // check for err
    // do something with result
    var _paq = _paq || [];
    _paq.push(['setUserId', result]);
    _paq.push(['trackPageView']);
});

请注意,我只是猜测返回数据作为结果和错误,但它可能在对象上。另外,我猜它接受回调函数作为一个参数。