Promise.try 没有蓝鸟
Promise.try without bluebird
我正在尝试重新创建 bluebird 的 promise.try 功能,这在本质上是一样的吗?
function promiseTry(callback) {
let error;
let value;
try {
value = callback();
} catch (e) {
error = e;
}
return new Promise((resolve, reject) => {
if (error) {
reject(error);
throw error;
}
resolve(value);
});
}
const x = promiseTry(() => {
throw new Error('hi');
});
如何使用原生节点 Promise 简单地实现 bluebird 的 Promise.try
?
这应该是等价的:
function promiseTry(callback) {
return new Promise((resolve, reject) => {
try {
resolve(callback())
} catch(e) {
reject(e);
}
});
}
const x = promiseTry(() => {
throw new Error('hi');
});
x.then(() => console.log("Promise resolved")).catch(err => console.log("Promise rejected:", err.message));
如果您可以使用 async/await
,async function
将隐式具有此行为。异步函数中抛出的任何同步异常都将转换为承诺拒绝。
我正在尝试重新创建 bluebird 的 promise.try 功能,这在本质上是一样的吗?
function promiseTry(callback) {
let error;
let value;
try {
value = callback();
} catch (e) {
error = e;
}
return new Promise((resolve, reject) => {
if (error) {
reject(error);
throw error;
}
resolve(value);
});
}
const x = promiseTry(() => {
throw new Error('hi');
});
如何使用原生节点 Promise 简单地实现 bluebird 的 Promise.try
?
这应该是等价的:
function promiseTry(callback) {
return new Promise((resolve, reject) => {
try {
resolve(callback())
} catch(e) {
reject(e);
}
});
}
const x = promiseTry(() => {
throw new Error('hi');
});
x.then(() => console.log("Promise resolved")).catch(err => console.log("Promise rejected:", err.message));
如果您可以使用 async/await
,async function
将隐式具有此行为。异步函数中抛出的任何同步异常都将转换为承诺拒绝。