在返回之前等待响应

时间:2015-11-20 10:18:31

标签: javascript node.js redux

对于我正在处理的应用,我们在Redux商店中使用服务器端React呈现,我们需要与我们的API进行通信。这一切都很好,但对于某些视图,我需要之前的数据我将它呈现给浏览器。我在渲染之前使用react-fetcher来执行函数,并且使用静态测试数据,这非常合适。但是,只要我想使用API​​中的数据,我就会迷失方向。一切都是异步的,但这意味着我的应用程序在我从API返回结果之前呈现。

我的代码如下所示:

function getData(apiToken, dispatch) {
  superagent.get('http://api.url/endpoint')
    .set('x-api-token', apiToken)
    .end((err, res) => {
      dispatch({
        type: 'MY_STORE_ACTION',
        data: res.body
      });
  });
}


@prefetch(({ dispatch, apiToken }) => getData(apiToken, dispatch))

当然,这不会起作用,因为end是异步回调而我的应用程序并不等待它。

可能值得一提的是,我对ECMAScript和NodeJS(来自PHP)的世界都很陌生,所以也许我的思维方式完全错误; - )

1 个答案:

答案 0 :(得分:0)

根据react-fetcher文档,您应该使用getData函数调用调度。

我会尝试以下方法:

function getData(apiToken) {
  // prefetch expects you to return a promise
  return superagent.get('http://api.url/endpoint')
    .set('x-api-token', apiToken)
    .end((err, res) => {
      return {
        type: 'MY_STORE_ACTION',
        data: res.body
      };
  });
}

@prefetch(({ dispatch, apiToken }) => dispatch(getData(apiToken))

并确保如上所述返回您的承诺。根据文件:

  

@prefetch装饰器用于通用数据,而@defer用于仅在客户端上需要的数据。他们每个人都接受返回承诺的功能。