2017-11-30 10 views
1

私は、約束を返す別の関数を呼び出す関数を1つ持っています。 しかし、fetch.then(...)を呼び出す代わりに、関数呼び出しの次の行を実行し、thenまたはcatchを実行します。 誰でもこの奇妙な行動について考えているのですか?ネイティブスクリプトでフェッチした直後には動作しません

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; 

}別のファイルに関数呼び出し

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

コンソール出力:

役割を実行し

第三

それは、最初の二行を実行ValidUserというの(...)を実行し、この場合の


inerror()

は私を助けてください。それは私のプロジェクトのすべてのAPIコールで発生します。

答えて

0

isvaliduser関数では、fetch promiseを返しています。したがって、関数を呼び出すときに約束を解決する必要があります。

キャッチを追加しての後にの後にエラーをキャッチしてログに記録することもできます。

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( "これは印刷されません"); }); –

+0

@ Radhey.gおそらく、それはエラーをキャッチしています。その後にキャッチを追加してください。投稿を編集します – Lokuzt

関連する問題