Queue.js to preload images is waiting forever? (Callback)

别等时光非礼了梦想. 提交于 2019-12-01 22:08:36

问题


I'm using mbostock queue.js script to load several json files, by doing something like that:

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

where ready is the function to execute when everythin is loaded.

I would like to preload an image by adding a defer. Is this possible? I have tried it several ways, but it doesn't work.

I suppose that a function must be created, but I can't make it asynchronous, and the queue keeps waiting forever...


回答1:


Here is what queue.js is expecting from the callbacks:

The callbacks follow the Node.js convention where the first argument is an optional error object and the second argument is the result of the task.

Thus a simple version of your code might look like this:

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) }
    });

I'm not sure what (if anything) you wanted to return about the image, but in the above example cb(null, img) I'm returning the whole object.



来源:https://stackoverflow.com/questions/18081023/queue-js-to-preload-images-is-waiting-forever-callback

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!