सीक्वलाइज़र का उपयोग कर रहा हूँ और संघर्ष कर रहा हूँ क्योंकि विधि हमेशा के लिए लंबित अवस्था में है।

मैं जो करने की कोशिश कर रहा हूं उसका एक सरलीकृत संस्करण निम्नलिखित है। मूल रूप से, एक एपीआई बैचप्रोसेसर को कॉल करके नीचे दिए गए तरीकों का उपयोग करता है, जिसे प्रदान किए गए जेसन को संसाधित करना था।

मैं मूल रूप से बैचप्रोसेसर को फ़ाइनलथीम विधि से थीमप्राइस और थीमगेट प्राप्त करना चाहता हूं लेकिन वादा हमेशा के लिए लंबित है।

export default {


  async FinalTheme(id) {

    return db.Themes.findOne({
      where: {
        ID: id
      },
      attributes: ["ThemeCost","ThemeGate"],

      limit: 1
    })
      .then(data => {

        if (data == null) {
          return -1;
        }

        return {
          cost: data["ThemeCost"],
          gate: data["ThemeGate"]
        };
      })
      .catch(err => {
        return false;
      });
  },


  async BatchProcessor(record, index_number) {

    const SQL ="SELECT * FROM themes";


    return db.sequelize
      .query(SQL, {

        type: db.sequelize.QueryTypes.SELECT
      })
      .then(themes => {
        // do we have data here?

        const totalThemes = themes.length;


          let lastAmount = record["Amount"]; 
          for (
            let counter = 0;
            counter < totalThemes - 1;
            counter++
          ) {


            const CustomerFinalTheme = this.FinalTheme(record["CustomerID"]); // FOREVER PENDING


          }



      })
      .catch(err => {
        console.log(JSON.stringify(err));
      });
  },

};

मैं गलत क्या कर रहा हूँ?

0
Nie Selam 4 पद 2018, 15:19

2 जवाब

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

This.FinalTheme(... एक वादा लौटाता है न कि वह मूल्य जो आपको करना है:

this.FinalTheme(record["CustomerId"]) // where is the record assigned?
    .then(data => {
        const CustomerFinalTheme = data;
    })

कार्यों की घोषणा करते समय एसिंक का उपयोग करने की भी आवश्यकता नहीं है यानी निम्नलिखित ठीक है:

FinalTheme(id) {
    return db.Themes.findOne({
    [...]
}
1
Svetoslav Petrov 4 पद 2018, 15:23

आप बैचप्रोसेसर के ब्लॉक के अंदर एक लूप चला रहे हैं। आप लूप के लिए अंदर प्रतीक्षा कर सकते हैं।

async BatchProcessor(record, index_number) {

  const SQL ="SELECT * FROM themes";
  const themes = await db.sequelize.query(SQL, { type: db.sequelize.QueryTypes.SELECT });
  const totalThemes = themes.length;
  let lastAmount = record["Amount"]; 
  for (let counter = 0; counter < totalThemes - 1; counter++) {
     const CustomerFinalTheme = await this.FinalTheme(record["CustomerID"]);
   }
  return 'ALL DONE';
}
0
Vikramaditya 4 पद 2018, 15:27