मैं पापा पार्सर में सभी को कॉन्फ़िगर करने में सक्षम था और यह 200k आइटम पार्सिंग के साथ भी अच्छी तरह से काम करता है। इसलिए मैं सभी डेटा को संसाधित कर सकता हूं और वे परिणाम सरणी में प्रत्येक पंक्ति के लिए प्रतीक्षा कर रहे हैं। समस्या यह है कि अगर मैं एक कदम का उपयोग कर रहा हूं तो मैं पिछले चरण की प्रतीक्षा कैसे कर सकता हूं? यह पार्सर को हजारों कॉलों को सक्रिय कर रहा है और फिर मुझे अवरुद्ध कर रहा है। मैंने कदम को दूसरे समारोह में लपेटने की कोशिश की लेकिन इससे भी मदद नहीं मिली।

चरण कॉल में मैं जो कर रहा हूं उसका एक नमूना यहां दिया गया है

async function stepFn(results, parser) {
stepped++;
      (await (async function () {
        if (results) {
          if (results.data) {
            rowCount += results.data.length;
            console.log('checking if item exists');
            var itemExistsP = await restcallToRetrieve();
            if (itemExistsP.length > 0) {
              console.log('Item exists, skipping');
              //return;
            } else {
              console.log('adding item to list');
              await restcalltoAdd();
              // return item;
            }
          }
          if (results.errors) {
            errorCount += results.errors.length;
            firstError = firstError || results.errors[0];
          }
        }
      }()));
}

यहां पार्सर कॉल है:

Papa.parse($('#parse-file')[0].files[0], {
            delimiter: '',
            header: true,
            dynamicTyping: false,
            skipEmptyLines: true,
            preview: 0,
            encoding: '',
            step: stepFn,
            worker: false,
            comments: '',
            download: false,
            complete: completeFn,
            error: errorFn,
            });
0
Ricardo Silva 29 सितंबर 2020, 15:06

1 उत्तर

सबसे बढ़िया उत्तर

बस एक async स्टेपफंक्शन बनाएं:

async function stepFn(results, parser) {
    parser.pause(); // pause the parser

    if (results.data) {
        rowCount += results.data.length;

        let itemExists = await restCallToRetrieve(/*probably the data goes here*/);
        if (itemExists.length > 0) {
            console.log('Item exists, skipping');
        }
        else {
            console.log('adding item to list');
            await restCallToAdd(/*probably the data goes here*/);
        }
    }
    else if (results.errors.length > 0) { //Note that I am checking if there are errors
        errorCount += results.errors.length;
        firstError = results.errors[0];
    }
    parser.resume(); // resume the parser
}

फिर parse config object में:

Papa.parse(file, {
    step: stepFn
});

यह भी अच्छा होगा कि आप जो कुछ भी प्रतीक्षा कर रहे हैं उसे try catch ब्लॉक में रखें लेकिन यह निश्चित रूप से बिंदु के बगल में है।

0
Laurent Dhont 30 सितंबर 2020, 14:38