在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 一道 關(guān)于異步回調(diào)的面試題,求解

一道 關(guān)于異步回調(diào)的面試題,求解

  1. 有一個(gè)認(rèn)證過(guò)程auth(username,password,cb)包括以下步驟,請(qǐng)用js語(yǔ)言實(shí)現(xiàn)此方法:
  • 先判斷是否本系統(tǒng)用戶authLocal(username, cb)
  • 如果是本系統(tǒng)用戶, 接著判斷密碼authPassword(password, cb)
  • 如果不是本地用戶, 分別去驗(yàn)證是否是 QQ 用戶或 Weibo 用戶; authQQ(username, cb); authWeibo(username, cb);
  • 如果是QQ或Weibo用戶, 則判斷是否有權(quán)限登陸本系統(tǒng),authPriviage(username,cb);
以上全部為異步操作, cb 統(tǒng)一為 function(err, result) 形式。

這個(gè) 代碼 具體怎么實(shí)現(xiàn)呢?

回答
編輯回答
小曖昧

if(authLocal(username, cb)){

authPassword(password, cb)

}else if(authQQ(username, cb) || authWeibo(username, cb)){

authPriviage(username,cb)

}else{

console.log('驗(yàn)證不通過(guò)')

}
說(shuō)實(shí)話 我沒(méi)看出來(lái)這是個(gè)異步的流程

2017年11月21日 10:35
編輯回答
嘟尛嘴

使用es6 (webpack + babel)

import pify from 'pify'
const aLocal = pify(authLocal)
const aLocalPassword = pify(authPassword)
const aQQ = pify(authQQ)
const aWeibo = pify(authWeibo)
const aPriviage = pify(authPriviage)

function auth(username,password, cb){
    try{
        let res
        let isLocal = await aLocal()
        if(isLocal){
          res =  await aLocalPassword(password)
          cb(null,res)
        } else {
            let isQQ = await aQQ(username);
            let isWeibo = await aWeibo(username);
            if(isQQ || isWeibo){
                res = await aPriviage(username)
                cb(null,res)
            } else {
                cb(null, {
                    //...這里是沒(méi)有找到的提示
                })
            }
        }
    }catch(e){
        cb(e)
    }
}


2017年6月21日 15:52
編輯回答
維她命

出這個(gè)題目的目的,是為了考回調(diào),寫(xiě)出了答案,面試官自然就會(huì)問(wèn)這么寫(xiě)是不是不好,怎么改進(jìn),然后可以說(shuō)用 Promise,然后肯定要寫(xiě) Promise 版本,這個(gè)時(shí)候就差不多了。如果面試官問(wèn)有沒(méi)有更好的解決辦法,就可以說(shuō)用 Async。

authLocal(username, function (err, res) {
    if (err) {
        alert('不是本系統(tǒng)用戶');
        authQQ(username, function (err, res) {
            if (err) {
                alert('不是 qq 用戶');
                return;
            }
            authPriviage(username, function (err, res) {
                if (err) {
                    alert('是 qq 用戶但沒(méi)有權(quán)限登錄');
                    return;
                }
                alert('有權(quán)限的 qq 用戶');
            });
        });
        authWeibo(username, function (err, res) {
            if (err) {
                alert('不是 weibo 用戶');
                return;
            }
            authPriviage(username, function (err, res) {
                if (err) {
                    alert('是 weibo 用戶但沒(méi)有權(quán)限');
                    return;
                }
                alert('有權(quán)限的 weibo 用戶');
            });
        });
        return;
    }
    authPassword(password, function (err, res) {
        if (err) {
            alert('密碼錯(cuò)誤');
            return;
        }
        alert('登錄成功');
    });
});
2017年3月15日 00:58
編輯回答
囍槑

都是異步回調(diào)判斷的問(wèn)題,如果全部用if...else...顯得有點(diǎn)嵌套有點(diǎn)深,你可以先回答用if...else

然后再回答用es6的promise形式 或者用 async...await形式來(lái)表達(dá)、

2018年4月6日 07:21