У меня есть одна функция, которая вызывает другую функцию, которая возвращает обещание. Но вместо вызова 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 моего проекта.
В функции 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);
});
}