在fetch .then内调用另一个函数-Javascript

时间:2018-10-15 20:52:58

标签: javascript promise fetch

我对ES6相当陌生(用于与Jquery和所谓的回调地狱一起使用)。我得到了此代码(有效):

    feti(api_login, tudo);

    function feti(caminho, dados) {
      fetch(caminho, {
      method: 'POST',
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(dados)
      })
      // captura o erro 
      .then(erroAPI)
      // converte o sucesso em JSON
      .then(response => response.json())
      // disponível para uso
      .then((data, outraFunc) => {
        resposta = data.qscoluna;
        porTod(resposta);
      });
    }

    function porTod(valor){
      let api_login_suc = valor[0];
      salvaTudo(api_login_suc);
    }

第一个函数是使用提取(feti)的函数,第二个函数是使用第一个函数(porTod)的响应。

在我的站点中,我使用了许多API调用,因此我想使“ feti”函数成为可重用的函数。问题是:如何在不调用第二个函数的情况下从第二个函数中使它成为必需的(就像我现在正在做的那样?)?如果我只是尝试从fetch中返回结果并在第二个函数中使用它,我将得到未定义的响应,这与预期的一样。我相信某种承诺会是理想的,但是我找不到与自己的问题类似的问题,而且我陷入了困境。如果有人能指出我正确的方向,那就太好了。只需“搜索此内容”将有很大帮助!

谢谢:D

1 个答案:

答案 0 :(得分:1)

只需返回您要处理的承诺:

function feti(caminho, dados) {
  return fetch(caminho, {
    method: 'POST',
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(dados)
  })
  // captura o erro 
  .then(erroAPI)
  // converte o sucesso em JSON
  .then(response => response.json())
}

然后,而不是只打电话给feti(api_login, tudo);

feti(api_login, tudo).then(data => {
  const resposta = data.qscoluna;
  porTod(resposta);
});