【问题标题】:Getting undefined when calling an async function from another function javascript从另一个函数javascript调用异步函数时未定义
【发布时间】:2020-06-18 11:50:52
【问题描述】:

对于这个项目,我使用的是 wretch,它是 fetch 的包装器

这是我的代码的突破:

我对一个单独的服务文件进行了可怜的调用,以将渲染功能与可怜的功能分开。

我正在导出

export const wretchFunc = var => {
  return wretch(url)
    .json({
      var,
    })
    .get()
    .json()
};

问题出在第二个文件上:函数 2 呈现了这个可怜的函数的结果,我确实解决了承诺,我得到了我想要的结果,但是当我从函数 1 调用它时,返回值是未定义的,即使放置function2 中的 console.log 为我提供了我正在寻找的布尔值。

我有一个函数1,它返回:

return (function2 || function3)

function2 渲染 wretchFunc 的结果,类似这样:

function function2(state) {
  const var = fun(state);
  if (!var) {
    return false;
  }
  wretchFunc(var).then(json => {
    return JSON.parse(json).isTrue;
  });
}

我的假设是函数 1 在收到函数 2 的结果之前被执行,但我不知道该怎么做。

编辑: 我试着做:

 return wretchFunc(var).then(json => {
    return JSON.parse(json).isTrue;
  });
}

这给了我另一个承诺,我可以在上层函数上解决,但由于我有一个先前的条件 if(!var) 返回 false,这将使函数返回 2 个不同的东西。有没有办法可以在 function2 中转换 promise 的值并强制 function1 等待它的结果。

谢谢

【问题讨论】:

  • 我假设在函数 2 中解决 promise 之前返回值。
  • 是的,如果你看到我的编辑,函数没有返回任何东西,如果我在 wretchFun 之前添加 return 可以解决它,但问题是函数可能会返回一个布尔值,如果如果它达到第二个条件,它会达到第一个条件或承诺,如果有的话我可以解决这个问题。
  • 你为什么要调用 .json 两次而不是 wretch call ?根据文档,还有 resolve() 方法,您可以在 .get().json().resolve() 之后调用它?

标签: javascript reactjs asynchronous promise fetch


【解决方案1】:

尝试包装新的 Promise 并返回它

function function2(state) {
  return new Promise((res, rej) => {
    const var = fun(state);
    if (!var)
      res(false);
    wretchFunc(var)
    .then(json => resolve(JSON.parse(json).isTrue)
    .catch(err) => rej(err));
  })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-09
    • 2020-03-04
    • 2021-08-07
    • 2019-06-20
    • 2020-04-02
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多