то не работает сразу после получения в nativescript

1

У меня есть одна функция, которая вызывает другую функцию, которая возвращает обещание. Но вместо вызова fetch.then(...) он выполняет следующую строку под вызовом функции, а затем выполняет затем или catch. кто-нибудь имеет представление об этом странном поведении?

ех.

  isvalidUser = function(uid,pwd)
{
  console.log("first");
  return fetch(config.loginApiUrl + "?uid=" +uid +"&pwd="+pwd)
.then((response) => {
    if(response.ok)
    {
     console.log("second");
    return response.json();
    }else {
        return Promise.reject({status: response.status, data});
      }
}).then(function(data) {

    console.log("data l:" + data.length);
    for(var i=0;i<=data.length;i++)
    {
        console.log("third ");
     viewModel.get("roleId").push(data[i].securityRoleId);
     viewModel.get("UserName").push(data[i].name);
    }
}).catch(handleErrors); 
 } 

 function handleErrors(response) {
if (!response.ok) {
 console.log("inerror");
    console.log(JSON.stringify(response));
    throw Error(response.statusText);
}
return response;

} вызов функции в другом файле

    btn_click()
 {
  console.log("execute");
  login.isvaliduser(id,pwd);-----------------------1
  var rid = login.get("roleId").getItem(0);---------------------2
        console.log("role:"+rid);
   }

консольный вывод: выполнить

первый

роль:

второй

в третьих

в ошибке


в этом случае сначала выполняется вторая строка, затем выполняется (...) validUser()

Помогите мне, пожалуйста. Это происходит в каждом вызове api моего проекта.

Теги:
promise
fetch
nativescript

1 ответ

1
Лучший ответ

В функции isvaliduser вы возвращаете обещание выборки. Поэтому вы должны решить обещание, когда вы вызываете функцию.

Вы можете даже добавить улов после этого, чтобы поймать любые ошибки и занести их в журнал.

function btnClick() {
    login.isvaliduser(id,pwd).then(function (whatever) {
      // do whatever you want next
      var rid = login.get("roleId").getItem(0);
    })
    .catch(function (error) {
      console.error(error);
    });
}
  • 1
    Спасибо! Я думаю, что это должно работать. Я постараюсь дать вам знать
  • 1
    спасибо, теперь fetch.then выполняется, но проблема в том, что он не входит в login.isvaliduser (id, pwd) .then (function () {console.log ("это не печать");});
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню