Javascript Async/Await和Redux Thunks:调用';调度';隐式地返回恶棍的承诺?

Javascript Async/Await和Redux Thunks:调用';调度';隐式地返回恶棍的承诺?,javascript,redux,promise,async-await,redux-thunk,Javascript,Redux,Promise,Async Await,Redux Thunk,我试着把我的脑袋绕到“async/await”上,async函数总是返回Promises,并且使用带有Redux Thunks的异步函数-- 我知道async函数根据定义总是返回一个承诺。但是,如果异步函数的最后一行不是await,该怎么办 const foo = async (y, z) => { await somethingElse() const x = y + z; } foo是否返回解析为“x”的Promise,因为它位于最后一行?如果没有,它会返回什么承诺 所以,在

我试着把我的脑袋绕到“async/await”上,
async
函数总是返回
Promises
,并且使用带有Redux Thunks的异步函数--

我知道
async
函数根据定义总是返回一个承诺。但是,如果异步函数的最后一行不是
await
,该怎么办

const foo = async (y, z) => {
  await somethingElse()
  const x = y + z;
}
foo
是否返回解析为“x”的
Promise
,因为它位于最后一行?如果没有,它会返回什么
承诺

所以,在写thunk的时候,我有一个这样的函数

export const loadData = key => async (dispatch) => {
  const url = 'http://something.com/api/v1/get_key';
  const keyObj = { key };
  const method = 'POST';
  const headers = { 'Content-Type': 'application/json' };
  const body = JSON.stringify(keyObj);

  try {
    const res = await isofetch(url, { method, headers, body });
    const data = await res.json();
    dispatch(loadDataSuccess(data));
  } catch (e) {
    debug('error with fetch', e.toString());
  }
loadData
返回什么?我相信
dispatch
会返回
Promise
loadData
也会隐式返回
Promise

如果最后一行是

return dispatch(loadDataSuccess(data));

??谢谢你的帮助

函数本身将返回一个承诺

const res = await isofetch(url, { method, headers, body });
const data = await res.json();
dispatch(loadDataSuccess(data));
Dispatch here将调度一个json对象响应。你不需要退货

const foo = async (y, z) => {
  await somethingElse()
  const x = y + z;
}
是的,这将回报承诺。但它将是未定义的,因为您尚未解决它

Promise {<resolved>: undefined}
如果不在异步函数中返回值,则需要等待该承诺获取数据:

await foo(y, z) // without return
foo(y, z) // with return

因此,从技术上讲,如何处理异步foo操作是您的意见。

async
函数始终以javascript返回承诺。如果
dispatch
没有返回承诺,您为什么要等待它?@bhojendraauniyar好的,谢谢。实际上,我认为dispatch返回操作(
返回(Object†):dispatched操作
----我不知道我从哪里想到它返回一个
承诺
。json数据被发送到还原程序。我不明白你所说的
等待foo(y,z)//不返回foo(y,z)是什么意思//使用return
——wait只能在异步函数内部,不能在外部,对吗?如果没有return,则只返回
未定义的
,对吗?@Bergi--我可能在等待一个异步API调用('somethingElse'))--我会编辑它…当你说“dispatch a json object response”时。你的意思是json response对象将被发送到相应的reducer,对吗?我只是想知道这个函数中发生了什么,正如你所说,它会返回一个承诺…是的,这正是我的意思。你不太关心这个函数在cas中会返回什么e、 您只需要将一个json对象分派到reducer,这是即将发生的事情。如果您不介意,我建议您使用Redux Devtools,这样您就可以轻松跟踪每个操作的有效负载以及更多内容。
await foo(y, z) // without return
foo(y, z) // with return