我花了一整天的时间想弄清楚我是否错误地使用了承诺。
这是反模式吗?
export const myExample = (payload) => {
return new Promise((resolve, reject) => {})
}
我能用异步实现这样的承诺吗?
export const myExample = (payload) => {
return new Promise(async (resolve, reject) => {})
}
这也是错误的吗?假设添加异步在默认情况下使其成为一个承诺,
export const myExample = async (payload) => {
return new Promise((resolve, reject) => {})
}
另外,如果是这样的话,我是否应该从与解析相同的函数返回,如果我抛出错误将被拒绝,那么应该是这样吗?
export const myExample = async (payload) => {
if(payload) return true
else throw new Error('Promise rejection?')
}
那么第一次和最后一次是一样的吗?
发布于 2020-08-14 09:12:07
export const myExample = (payload) => {
return new Promise((resolve, reject) => {})
}
应该只用于将不基于承诺但异步返回结果的代码转换为允诺。
export const myExample = (payload) => {
return new Promise(async (resolve, reject) => {})
}
async
已经创建了一个函数来返回一个承诺,而您在这里打破了承诺链。
export const myExample = async (payload) => {
return new Promise((resolve, reject) => {})
}
与第一个相同,new Promise
只用于将不基于承诺但异步返回结果的代码转换为允诺。如果可以提交async
,则取决于该函数中的其他代码。但是,如果您需要使用new Promise((resolve, reject) => {})
,那么封闭函数应该只包含并返回new Promise
,就像在第一个示例中那样。
另外,如果是这样的话,我是否应该从与解析相同的函数返回,如果我抛出错误将被拒绝,那么应该是这样吗?
是
发布于 2020-08-14 09:22:46
这是一个很好的问题,我也面临着这样的困惑,我想知道在哪里使用什么样的结构。想出了这个:
异步/等待--我在高级别使用它,主要是编写处理部分。
async function asyncExample() {
try {
const sampleData = await otherFunction();
// You code here
} catch (err) {
// Your error handling here
}
}
在异步/等待中使用try/catch
总是一个好主意
使用新的承诺(解决,拒绝)的概念。当我必须包装一个只支持回调的函数时,我通常使用它。
function promiseExample() {
return new Promise((resolve, reject) => {
// your code to resolve()
// otherwise to reject()
});
}
但是有一个很好的模块promisify
,它有时是一个比包装每个函数更好的解决方案。
发布于 2020-08-14 09:12:03
这不是反模式,您需要使用解析函数(例如resolve(payload+'concatenate')
)对承诺中的有效负载参数执行一些逻辑操作,还应该根据有效负载参数实现拒绝函数。
export const myExample = (payload) => {
return new Promise((resolve, reject) => {})
}
您不应该使用异步等待一旦定义了一个承诺,这些承诺只能在调用/执行承诺时使用。
export const myExample = (payload) => {
return new Promise(async (resolve, reject) => {})
}
这个代码片段也是如此。
export const myExample = async (payload) => {
return new Promise((resolve, reject) => {})
}
您应该在函数中使用await,因为您使用的是异步关键字,而且在代码段中也没有定义承诺,所以在使用异步等待之前一定要定义它们,因此您将能够返回一些值或抛出一个错误。
export const myExample = async (payload) => {
if(payload) return true
else throw new Error('Promise rejection?')
}
https://stackoverflow.com/questions/63409563
复制相似问题