如何实现函数的一个功能

如下函数怎么让它返回isLogin的状态?

//因为多处地方用到了这个判断登录,所以我想把它单独拿出来
'strict 模式';

function checkLogin() {
  var login;
  await Account.isLogin().then(function (isLogin) {    //Account.isLogin() 一个promise
          login = isLogin;   //boolean
  });
  return login;     //实际情况是=> undefined,原因是异步,所以上面之后加上了await
}

//这里await报错了 ‘Uncaught Error: Module build failed: SyntaxError: await is a reserved word’

这个函数如何能改造下实现如下效果:

   //在别的地方用
   if(checkLogin()){
         //登录后的。。。。。
   }
阅读 2.2k
3 个回答

由于异步处理机制和同步处理机制不同,异步函数不能改为同步执行(在别的语言中可以通过 join 来实现同步,目前 JavaScript 不可以),所以对 JavaScript 异步函数的调用,不管采用何种方式(回调、Promise、await 等)都需要调用者本身支持异步处理。

用 async/await 可以让代码写/看起来比较像同步代码,但仍然需要对外部调用者进行改造,必须声明为 async 函数,如

async function outer() {
    if (await checkLogin()) {
         ////
    }
}

如果外部函数不能改造,考虑用 Promise.then

checkLogin().then(mark => {
    if (mark) {
        /////
    }
});

其实这种方式也可以改 await 的,加一个 async 封装即可

(async () => {
    if (await checkLogin()) {
        // 
    }
})();

参阅:

if(await Account.isLogin()){
         //登录后的。。。。。
   }

这里需要使用 sync 和 await实现。

function sync checkLogin() {
  return Account.isLogin().then(res => res);
}

//判断也要使用sync和await
getUserInfo = sync => {
    if(await checkLogin()){
       //登录后的。。。。。
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题