javascript - 在Meteor.method中触发事件时返回值

时间:2018-03-11 06:48:20

标签: javascript node.js events meteor web-scraping

我正在尝试使用node-image-scraper软件包从网页中抓取一些图像,然后将图像数组返回到Meteor中的客户端。但是,鉴于包装的事件驱动性质,我目前不知道这是如何工作的。

public static int linearMaxSolve(int[] arr) {
int max = Integer.MIN_VALUE;
int sum = 0;
for (int i : arr) {
    sum += i;
    if (i > sum) {
        sum = i;
    }
    if (sum > max) {
        max = sum;
    }
}
return max;
}

从事件返回图像不起作用,返回外部图像返回一个空数组。有没有办法让这项工作?或者根据情况从根本上不可能?如果我需要将完整的图像集返回给客户端,该怎么做呢?

1 个答案:

答案 0 :(得分:1)

简单地回复承诺:

Meteor.methods({
scrapeImgs(url){
    let images = []; // define vars
    imageScraper.on('image', (image) => {
       images.push(image);
    });

    imageScraper.address = url;
    imageScraper.scrape();

    return new Promise((resolve, reject) => {
        imageScraper.on('end', () => {
            resolve(images); // This will only trigger on end
            // Check end really triggers when expected
            // Don't use return on callbacks unless terminating explicitely
        });
        // Guessing it has an error event...
        imageScraper.on('error', (err) => {
            reject(new Meteor.Error(err));
            // Reject with Meteor.Error since these are caught and sanitized 
        })
    });
    // returns an empty array as array was populated on event callback, not on current process loop.
},
});

根据您的前端呼叫,您可以直接访问该值或访问.then(),只需检查前端:)