Переменная не определена вне области действия функции, несмотря на то, что она назначена?

Это означает, что наиболее переносимым способом определения реализации методов классов шаблонов является определение их внутри определения класса шаблона.

template < typename ... >
class MyClass
{

    int myMethod()
    {
       // Not just declaration. Add method implementation here
    }
};
1
задан EnglischerZauberer 3 March 2019 в 17:27
поделиться

2 ответа

discovery.query () принимает два свойства:
1-param
2 -функция (также известная как обратный вызов)

Discover.query () выполняется , но возвращается до выполнения обратного вызова,
next console.log ("FullString (2.)" + filterStr);
Наконец, выполняется обратный вызов.

Вы должны предпринять желаемые действия в вашем обратном вызове.

Это боль, но так работает JavaScript. Точнее, как работает discovery.query (). Хуже того, когда у вас есть вложенные обратные вызовы, это может стать очень запутанным и иметь имя: «ад обратного вызова». Современные решения этой проблемы обещания и асинхронность ждут.

Удачи

0
ответ дан Mke Spa Guy 3 March 2019 в 17:27
поделиться

discovery.query является асинхронной функцией, поэтому переменная filterStr не будет определена, пока не достигнет обратного вызова. Вам нужно будет использовать filterStr в обратном вызове discovery.query или использовать async/await в блоке try/catch для return results.

Асинхронные функции работают, позволяя выполнять их без прерывания потока. Вот почему выполняется console.log(2.), а затем спустя некоторое время console.log(1.) выполняется внутри обратного вызова (из-за функции asynchronous требуется некоторое время для достижения обратного вызова). Вы пытаетесь что-то сделать synchronously, и для этого вам нужно реорганизовать свой код. Нажмите здесь для получения дополнительной информации об асинхронном и синхронном выполнении.

Внутри обратного вызова :

getSimilarCasesFromID: function(req, res, next) {
  const queryString = "id::"+req.params.id; 
  const params = {
    'query': queryString,
    'environment_id':environmentId,
    'collection_id': collectionId,
    'configuration_id': configurationId,
    return: 'enriched_text'
  };

  const filterStrArr = [];

  const FILTER_CONCEPT = "enriched_text.concepts.text:";

  discovery.query(params, (error, results) => {
    if (error) {
      next(false, err, []);
    } else {
      let filterStr ="";

      const conceptSize = results.results[0].enriched_text.concepts.length;

      let concepts = {};
      for (let i = 0; i < conceptSize; i++) {
        concepts[i] = { 
          text: results.results[0].enriched_text.concepts[i].text,
          relevance: results.results[0].enriched_text.concepts[i].relevance
        };

        filterStrArr[i].push(FILTER_CONCEPT + concepts[i].text);
      }

      filterStr = filterStrArr.join(",");
      console.log(filterStr);

      // utilize filterStr here

      next(true, [], []);
    }
  });
},

С async/await :

getSimilarCasesFromID: async function(req, res, next) {
  const queryString = "id::"+req.params.id; 
  const params = {
    'query': queryString,
    'environment_id':environmentId,
    'collection_id': collectionId,
    'configuration_id': configurationId,
    return: 'enriched_text'
  }

  const filterStrArr = [];

  const FILTER_CONCEPT = "enriched_text.concepts.text:";

  let filterStr ="";

  try {
    const results = await discovery.query(params);

    const conceptSize = results.results[0].enriched_text.concepts.length;

    let concepts = {};
    for (let i = 0; i < conceptSize; i++) {
      concepts[i] = { 
        text: results.results[0].enriched_text.concepts[i].text,
        relevance: results.results[0].enriched_text.concepts[i].relevance
      };

      filterStrArr[i].push(FILTER_CONCEPT + concepts[i].text);
    }

    filterStr = filterStrArr.join(",");
    console.log(filterStr);

    // utilize filterStr here

    next(true, [], []);       

  } catch(err) {
     next(false, err, []);
  }
},
0
ответ дан Matt Carlotta 3 March 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: