Ответ не готов в .then () - PullRequest
       8

Ответ не готов в .then ()

0 голосов
/ 18 января 2020

У меня есть функция, которая возвращает обещание, которое в конечном итоге возвращает массив. В моем .hen, когда я пытаюсь получить доступ к своему первому элементу в массиве, он все еще не определен. Когда я регистрируюсь, ответ корректен, но если я получаю доступ к элементам внутри, это терпит неудачу.

myPromise().then((response)=>{
  ///consoles array
  console.log(response);
  //undefined
  console.log(response[0]);
  //consoles the item
  setTimeout(function(){console.log(response[0])}, 1000);
}

baseCall( url ){
  return new Promise((resolve, reject)=>{
     request(url , (error, response, json) => {
        if (!error && response.statusCode === 200) {
          resolve(JSON.parse(json));  
             } else {
                reject("Error: Something wrong");
             }
      });
   });
}

myPromise(){
   let myReturn = [];
   baseCall( 'sampleurl' ).then((response)=>{
      response['valueNeed'].forEach(value =>{
          let addValue = {};
          addValue["someItem'] = value.someItem;
          //.... add more stuff
          myReturn.push(addValue);
      }
   }).then(()=>{
      resole(myReturn);
   });
}

Json Проанализировано

{
  "valueNeed":[
     {"id": 1, "someItem": "someVal1"},
     {"id": 2, "someItem": "someVal2"}
   ]
}

Как мне заставить это работать без таймаута? Я думал, что метод затем не предполагал срабатывать, пока обещание не будет выполнено.

Ответы [ 2 ]

0 голосов
/ 18 января 2020

response будет объектом ответа HTTP, а не вашим массивом. Вы можете попробовать response.body. В качестве альтернативы, подобно подходу обратного вызова, body может быть передано в качестве второго параметра, т.е.

0 голосов
/ 18 января 2020

попробуйте присвоить ответ другим переменным, таким как const tempvariable = response, а затем использовать эту временную переменную для доступа к массиву, иногда реагировать очищает память и могут происходить странные вещи, подобные этому.

...