我正在使用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时执行的函数。
我想通过添加延迟来预加载图像。这可能吗?我已经尝试了几种方法,但它不起作用。
我认为必须创建一个函数,但我不能使它异步,队列会一直等待...
答案 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)
我将返回整个对象。