Javascript - 将两个函数 then/catch 样式更改为 async/await 样式
Javascript - Change two function then/catch style into the async/await style
我正在尝试了解 .then()
函数如何获得这样的两个参数。
const promise = doSomething();
const promise2 = promise.then(successCallback, failureCallback);
或
const promise2 = doSomething().then(successCallback, failureCallback);
但我想像这样将两个参数 .then()
转换为 async/await
。
const result = await doSomething()
// execute successCallback if success.
// execute failureCallback if failure.
这是我正在努力学习的网站。
try {
const result = await doSomething()
// success
successCallback();
}
catch (e) {
// error
failureCallback();
您可以将 doSomething 包装在一个 try catch 方法中,以像这样捕获成功和失败。
try {
const result = await doSomething()
} catch (err) {
console.log(err.message)
}
当你 await
一个 resolve 的 promise 时,你直接得到它的值:
const result = await doSomething();
当您 await
一个拒绝的承诺时,它会抛出一个异常,您可以让该异常传播回当前函数的调用者(作为一个被拒绝的承诺,因为所有 async
函数 return promise 和 async 函数将未捕获的异常变成被拒绝的 promise)或者你可以在本地使用 try/catch
.
自己捕获它
try {
const result = await doSomething();
} catch(e) {
console.log(e);
}
不建议将承诺映射到回调。最好只 return 承诺,让调用者直接使用 .then()
或 await
.
处理承诺
如果您确实需要将 await
映射到 successCallback
和 failureCallback
,那么您可以这样做:
try {
const result = await doSomething();
successCallback(result);
} catch(e) {
failureCallback(e);
}
但是,到那时,您也可以只使用 .then()
,因为它的代码更少:
doSomething().then(successCallback, failureCallback);
但是,正如我之前所说,您通常不想将承诺映射到回调中。您更有可能将较旧的 callback-based API 包装到 promise 中,这样您就可以对所有 control-flow 而不是 mix/match 模型使用 promises(当您混合模型时,这往往会使良好的错误处理变得非常复杂) .
我正在尝试了解 .then()
函数如何获得这样的两个参数。
const promise = doSomething();
const promise2 = promise.then(successCallback, failureCallback);
或
const promise2 = doSomething().then(successCallback, failureCallback);
但我想像这样将两个参数 .then()
转换为 async/await
。
const result = await doSomething()
// execute successCallback if success.
// execute failureCallback if failure.
这是我正在努力学习的网站。
try {
const result = await doSomething()
// success
successCallback();
}
catch (e) {
// error
failureCallback();
您可以将 doSomething 包装在一个 try catch 方法中,以像这样捕获成功和失败。
try {
const result = await doSomething()
} catch (err) {
console.log(err.message)
}
当你 await
一个 resolve 的 promise 时,你直接得到它的值:
const result = await doSomething();
当您 await
一个拒绝的承诺时,它会抛出一个异常,您可以让该异常传播回当前函数的调用者(作为一个被拒绝的承诺,因为所有 async
函数 return promise 和 async 函数将未捕获的异常变成被拒绝的 promise)或者你可以在本地使用 try/catch
.
try {
const result = await doSomething();
} catch(e) {
console.log(e);
}
不建议将承诺映射到回调。最好只 return 承诺,让调用者直接使用 .then()
或 await
.
如果您确实需要将 await
映射到 successCallback
和 failureCallback
,那么您可以这样做:
try {
const result = await doSomething();
successCallback(result);
} catch(e) {
failureCallback(e);
}
但是,到那时,您也可以只使用 .then()
,因为它的代码更少:
doSomething().then(successCallback, failureCallback);
但是,正如我之前所说,您通常不想将承诺映射到回调中。您更有可能将较旧的 callback-based API 包装到 promise 中,这样您就可以对所有 control-flow 而不是 mix/match 模型使用 promises(当您混合模型时,这往往会使良好的错误处理变得非常复杂) .