内等待似乎有什么内在的错误必须定义一个无极的回调异步:使用无极
return new Promise(async (resolve, reject) => {
const value = await somethingAsynchronous();
if (value === something) {
return resolve('It worked!');
} else {
return reject('Nope. Try again.');
}
});
这显然是一个antipattern和有编码problems which can arise from it。据我所知,它变得更容易在这里未能发现错误,把里面try
/catch
块await
报表时也是如此。
我的第一个问题是,什么是编写这样的事情最好的办法,当一个人想转发的承诺与决心不同/拒绝值?随着/ catch?即
return new Promise((resolve, reject) => {
somethingAsynchronous().then(value => {
if (value === something) {
return resolve('It worked!');
} else {
return reject('Nope. Try again.');
}
}); // errors would now be propagated up
});
或者你只是把它拿出来的无极构造完全的建议here?
async function outerFunction() {
const value = await somethingAsynchronous();
return new Promise((resolve, reject) => {
if (value === something) {
return resolve('It worked!');
} else {
return reject('Nope. Try again.');
}
});
}
但是如果在outerFunction()中有多个await语句,即调用多个异步函数的线性代码块,会发生什么情况。那么你每次都必须创建并返回一个新的Promise吗?
但是那你怎么解释这样的代码呢?
async function outerFunction() {
if (someSynchronousCheck()) {
return 'Nope. Try again.' // another reject case
}
const value = await somethingAsynchronous();
// ...
}
我有这样的感觉,我会让它比它应该更复杂。我试图避免嵌套回调/链接然后/ catch块没有在未来创建更多的问题。
我的最后一个问题是,为什么回调传递给无极不是天生async
?它已经被封装在一个promise中,并期望异步调用解析/拒绝函数。
始终牢记,基本上_only_时间'新Promise'需要的是,如果你是一个不同的API互操作使用回调。 – loganfsmyth