【问题标题】:Getting chained Promise response获得链式 Promise 响应
【发布时间】:2018-12-29 19:08:50
【问题描述】:

我在从链式 Promise 中获取响应时遇到了一些问题。

我有我的组件链开始的地方

组件

  componentDidMount = async ()=> {
    try{
      const products = await post('payments/getProducts', {});
      console.log(products);
    } catch(e) {
      console.log(e)
    }
  }

这个组件调用我的 API 助手:

async function post(url, data) { 
token = null;  
if (firebase.auth().currentUser) {
  token = await firebase.auth().currentUser.getIdToken();
} 
    try {
      const response = axios({
        method: 'POST',
        headers: {
          Authorization: `${token}`,
        },
        data,
        url: `${API_URL}${url}`,
      })
      return response;
    } catch(e){
      Promise.reject(e);
    }
  }

然后我的 API Helper 调用一个调用 Stripe 的 Firebase Cloud Function:

paymentRouter.post('/getProducts', (req, res) => {
  return stripe.products.list()
  .then(products => {
    console.log(products.data)
    return products.data;
  })
  .catch(e => {
    throw new functions.https.HttpsError('unknown', err.message, e);
  })
})

调用函数没问题,我的Cloud Function注销了产品数据,但是我的API Helper和我的组件都无法得到响应。

【问题讨论】:

  • 第一件事我看到你没有在你的助手中使用awaitaxios
  • 谢谢,错过了。添加了它,但还没有快乐
  • post 是一个错误。这是async,但你没有做任何它可以帮助的事情。不应该有 try..catch - 你稍后会发现错误。此外,您不会返回Promise.reject(e)。这样你就可以抑制错误。只需从该函数中删除 async 并返回 axios(...)

标签: javascript reactjs promise google-cloud-functions


【解决方案1】:
 Promise.reject(e);

这是完全没有意义的,因为它创建了一个新的被拒绝的承诺,它不会在任何地方使用。你可以await它,让它链接到async function返回的promise中,或者你只是从axios返回promise:

async function post(url, data) {    
  let token = null; // always declare variables!
  if (firebase.auth().currentUser) {
    token = await firebase.auth().currentUser.getIdToken();
  } 

  return axios({
    method: 'POST',
    headers: {
      Authorization: `${token}`,
    },
    data,
    url: `${API_URL}${url}`,
  });
}

现在错误不再出现,您可能可以调试问题:)

【讨论】:

  • 谢谢,还是有问题。延迟一段时间后,我可以看到 Cross-Origin Read Blocking (CORB) blocked cross-origin response <firebase url> with MIME type application/json 虽然我已经受够了这些错误,怀疑它是红鲱鱼
猜你喜欢
  • 2020-01-17
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2012-10-22
  • 2021-06-11
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
相关资源
最近更新 更多