簡體   English   中英

javascript-當事件在Meteor.method中觸發時返回值

[英]javascript - return value when event triggers within Meteor.method

我正在嘗試使用node-image-scraper包從網頁中抓取一些圖像,然后將圖像數組返回給Meteor中的客戶端。 但是,考慮到包的事件驅動性質,我目前不知道這將如何工作。

var imageScraper = new imagescraper();
var images;

Meteor.methods({
    scrapeImgs(url){
        imageScraper.on('image', (image) => {
           images.push(image);
        });

        images = [];
        imageScraper.address = url;
        imageScraper.scrape();

        imageScraper.on('end', () => {
            return images; //does not work
        });

        return images; // returns an empty array
    },
});

從事件返回圖像不起作用,在外部返回圖像將返回一個空數組。 有什么辦法可以使這項工作嗎? 還是在特定情況下根本不可能? 如果我需要將全套圖像返回給客戶端,該怎么辦?

只需返回一個承諾:

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(),只需在前端進行檢查即可:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM