如何将异步请求改成同步?

新手上路,请多包涵

图片如下:

阅读 2.2k
4 个回答

在你们那边用 await 犯法嘛?

const getRolePath = async ()=>{
    var a = await getRoless()
    console.log(a)
}

或者你只是单纯加 await 和 async 也行,搭配你的 then 混用。但是其实没必要这样写

const getRolePath = async ()=>{
    var a
    await getRoless().then(res=> a = res);
    console.log(a)
}

你这里res我看下面也没用到啊

export const getRolePath = async () => {
  let res;
  try {
    res = await getRoless();
  } catch (error) {
    console.log(error);
  }
  console.log(res);
}

可以这样

var a
getRoless().then((res)=>{
    console.log(res,'有数据')
    a = res
    return res
}).then(()=>{
    console.log(a)
    //使用变量a
})

或者,不需要定义变量a

export const getRolePath = ()=>{
    return getRoless().then((res)=>{
        console.log(res,'有数据')
        //直接把后面逻辑放这
        const role = getRole()
        //...
        return paths
    })
}

很简单哇,所有的业务代码你就放到 .then() 里面书写啊,然后返回一个 Promise 就好了,比如说这样。

export const getRolePath = () => {
  return new Promise((resolve)=>{
    var a
    getRoless().then((res) => {
      console.log(res, '有数据')
      a = res
      const role = getRole()
      const pathMap = {
        PROVIDER_USER_PATH,
        MANAGE_USER_PATH
      }
      const paths = pathMap[`${role}_PATH`]
      resolve(paths)
    })
  })
}

或者用 async/awiat 的方式:

export const getRolePath = async () => {
  var a = await getRoless()
  console.log(a, '有数据')
  const role = getRole()
  const pathMap = {
    PROVIDER_USER_PATH,
    MANAGE_USER_PATH
  }
  const paths = pathMap[`${role}_PATH`]
  return paths
}

虽然不知道你为啥要声明一个变量 a,因为其实就不需要来着...


相关阅读

Promise - JavaScript | MDN
async 函数 - JavaScript | MDN

Promise 对象 - ECMAScript 6入门
javascript - async & await (译) - DarkZone'Home - SegmentFault 思否

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏