Javascript Async/Await和Redux Thunks:调用';调度';隐式地返回恶棍的承诺?
我试着把我的脑袋绕到“async/await”上,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
函数总是返回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