获得承诺待定..- ES6

时间:2017-10-27 06:26:25

标签: javascript es6-promise

我正在尝试捕获函数中两个服务调用的响应。要知道async和await会解决这个问题,并在下面尝试过。 这里面是async函数ex - 我正在调用用户,公司端点和控制台日志显示完美,但是通过调用异步函数来检索相同的值是给予Promise Pending。我尝试了两种选择 1.通过简单地调用异步函数 - 给予Promise Pending 2.通过等待前缀调用 - 给予等待是一个保留字。

请让我知道如何捕捉这个回复...

  const service = {
    getUsers: () => axios.get(`http://localhost:3000/users`),
    getCompanies: () => axios.get('http://localhost:3000/companies')
  };

  let ex = async () => {
    let users = {};
    let companies = {};
    try {
       users =   await service.getUsers()
       companies = await  service.getCompanies()

      console.log('Example ', {
        users: users.data,
        companies: companies.data
      })

    } catch (err) {
      console.log(err);
    }
    return  { users, companies};
  };
  //let resp = await ex(); - Giving await is a key word
   let resp = ex(); - Giving Promise pending
  console.log(resp);

1 个答案:

答案 0 :(得分:2)

async / await并不会神奇地允许您同步执行异步操作。无论你怎么削减它,你仍然需要在某个时刻等待价值。

所以你有两个选择。

  1. 将您想要处理的内容与检索到的值放在异步函数中
  2. let ex = async () => {
        let users = {};
        let companies = {};
        try {
            users =   await service.getUsers()
            companies = await  service.getCompanies()
    
            // DO STUFF WITH users AND companies HERE    
    
        } catch (err) {
          console.log(err);
        }
    }
    
    1. .then返回的承诺调用ex()并使用返回的值:
    2. ex().then(values => {
          console.log(values);
      });