2017-11-30 1 views
1

Ich habe eine Funktion, die eine andere Funktion ruft, die Versprechen zurückgeben. Aber anstatt holen fetch.then (...) es führt nächste Zeile unter Funktion aufrufen und dann führt oder fangen. hat jemand eine Idee über dieses seltsame Verhalten?dann funktioniert nicht direkt nach dem Holen in nativescript

ex.

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; 

} Funktionsaufruf auf eine andere Datei

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

Konsolenausgabe: ausführen

erste

Rolle:

Sekunden

dritte

inerror


in diesem Fall ist es zweite Zeile ausführen zuerst, dann führen Sie dann (...) von ValidUser()

mir bitte helfen. Es passiert in jedem einzelnen Aufruf meines Projekts.

Antwort

0

In der Funktion isvaliduser geben Sie das Fetch-Versprechen zurück. Sie müssen also das Versprechen lösen, wenn Sie die Funktion aufrufen.

können Sie sogar einen fangen nach dann zu fangen alle Fehler und melden Sie sie hinzufügen.

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

Vielen Dank! Ich denke, das sollte funktionieren. Ich werde versuchen, Sie wissen zu lassen –

+1

danke jetzt fetch.then wird ausgeführt, aber das Problem ist, dass es nicht innerhalb von login.isvaliduser (id, pwd) geht. Dann (function() { console.log ("dies wird nicht gedruckt "); }); –

+0

@ Radhey.g vielleicht ist es ein Fehler zu fangen. Fang danach an. Ich werde meinen Beitrag bearbeiten – Lokuzt

Verwandte Themen