然后在nativescript中获取后不能正常工作

时间:2017-11-30 14:00:39

标签: javascript promise fetch nativescript

我有一个函数调用另一个返回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调用中。

1 个答案:

答案 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);
    });
}