Queue.js预装图像是永远等待? (打回来)

时间:2013-08-06 13:04:17

标签: javascript d3.js preloading queue.js

我正在使用mbostock queue.js script加载几个json文件,做类似的事情:

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

其中ready是加载everythin时执行的函数。

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

我认为必须创建一个函数,但我不能使它异步,队列会一直等待...

1 个答案:

答案 0 :(得分:4)

以下是the callbacks所期望的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)我将返回整个对象。