我有一个函数调用另一个返回promise的函数。 但是它不是调用fetch.then(...)而是在函数调用下执行下一行,然后执行then或catch。 有没有人知道这种奇怪的行为?
离。
while true
parfor iPermutation=1:nPermutations
% Shuffle intervals
shuffledIntervals=cellfun(@(x,y) fPermute(x,y),Intervals,DurationOfExperiment,'UniformOutput',false);
% get parameters of shuffled intervals
shuffledParameters=cellfun(@(x) fGetParameters(x,nLags),shuffledIntervals,'UniformOutput',false);
shuffledParameters=cell2mat(shuffledParameters);
% get relative deviation
delta=abs((shuffledParameters-observedParams)./observedParams);
% find shuffled Lamps, which are inside alpha range
MaximumDeviation=max(delta,[] ,2);
MinimumDeviation=min(delta,[] ,2);
LampID=find(and(MaximumDeviation<alpha(2),MinimumDeviation>alpha(1)));
% if shuffling of ANY lamp was succesful, save these Intervals
if ~isempty(LampID)
shuffledIntervals=shuffledIntervals(LampID);
shuffledParameters=shuffledParameters(LampID,:);
parsave( LampID,shuffledIntervals,shuffledParameters);
'DONE'
end
end
break % You need to break out of the loop at some point
% otherwise it would run forever....
end
} 函数调用另一个文件
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;
控制台输出: 执行
第一
作用:
第二
第三
inerror
在这种情况下,它首先执行第二行,然后执行validUser()
然后执行(...)请帮帮我。它发生在我项目的每个api调用中。
答案 0 :(得分:1)
在 isvaliduser 函数中,您将返回获取承诺。所以你必须在调用函数时解决这个问题。
您甚至可以在然后之后添加 catch 以捕获任何错误并记录它们。
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);
});
}