承诺'拒绝和解决回调是否可能同时被调用?

时间:2018-03-28 02:46:54

标签: javascript meteor async-await es6-promise

我的代码看起来像这样,

export function handleLogin(window,userData){
    return (dispatch) => {
        Meteor.call('checkUserLogin',userData,
            (error,result)=>{
                if(result.isLogin && !error) {             
                    Meteor.call('SOMECALL',SOMEDATA (e,r)=>{
                    if(!e) {                           
                            async function getData(){ return await getAdminUgData();}
                            getData()
                            .then((d)=>{console.log('resolve!!');})
                            .catch((e)=>{console.log('!!reject'); });
                        }
        });
        });

    }; }

getAdminUgData是,

export function getAdminUgData(){
return new Promise((resolve, reject) => {
    Meteor.call('adminGetUserGroupData', (e,r)=>{
        if(e) reject(new Error('error'));
        else resolve(r);        

    });
});}

我应该打印'解决'只因为决心(r);确认在getAdminUgData中被调用。但令人困惑/奇怪的现实是“解决!!”打印出来之后,还会打印'!! reject'。我对此完全没有任何想法。欢迎任何建议;感谢。

1 个答案:

答案 0 :(得分:2)

不,it's absolutely impossible for the same promise to both reject and fulfill - 所以永远不会发生同时调用.then(…, …)的回调。但是totally possible that both a .then(…) and a .catch(…) callback are called when chained - 请注意,在您的示例中似乎并非如此,似乎还有其他事情发生。