3

我正在使用mbostock queue.js 脚本加载几个 json 文件,通过执行以下操作:

var q = queue()
.defer(d3.json, "world-110m.json")
.defer(d3.tsv, "world-country-names.tsv")
.await(ready);

其中 ready 是加载所有内容时要执行的函数。

我想通过添加延迟来预加载图像。这可能吗?我已经尝试了几种方法,但它不起作用。

我想必须创建一个函数,但我不能让它异步,队列一直在等待......

4

1 回答 1

4

这是 queue.js对回调的期望:

回调遵循 Node.js 约定,其中第一个参数是可选的错误对象,第二个参数是任务的结果。

因此,您的代码的简单版本可能如下所示:

var loadImage = function(src, cb) {
    var img = new Image();
    img.src = src;
    img.onload  = function(){ cb(null, img); };
    img.onerror = function(){ cb('IMAGE ERROR', null); };
};

queue()
    .defer(d3.json, "data/flare.json")
    .defer(d3.csv, "data/test.csv")
    .defer(loadImage, "img/test.png")
    .await( function(error, jsondata, csvdata, imagedata) {
        if (error) { console.log('error', error); } 
        else { console.log('success', jsondata, csvdata, imagedata) }
    });

我不确定您想要返回关于图像的什么(如果有的话),但在上面的示例中cb(null, img),我将返回整个对象。

于 2013-08-06T17:46:07.423 回答