gpt4 book ai didi

javascript - 使用 ES6 Promises 惯用地处理前置条件

转载 作者:搜寻专家 更新时间:2023-10-31 23:16:57 25 4
gpt4 key购买 nike

我是 ES6 Promises 的新手,一直在研究。我在 NodeJS 中执行了一些执行异步工作的代码,但我有一些必须首先检查的先决条件。我正在寻找惯用的最佳实践来处理这个问题(如果存在这样的事情)以及一些推理。我希望得到理解,因为我已经有了工作代码。

考虑以下虚构的片段:

function doStuff(data, cb) {
if (!data) {
return cb(new Error("Don't be an idiot"));
}

externalLibrary.doSomethingCallbackAsync(data, cb);
}

如果我要将其转化为应许之地,我看到两个选择。


选项 1,我可以在 promise 中包含前提条件。

function doStuff(data){
return new Promise((resolve, reject) => {
if (!data) {
return reject(new Error("Don't be an idiot"));
}

externalLibrary.doSomethingCallbackAsync(data, function(err, newData) {
if (err) {
return reject(err);
}
return resolve(newData);
});
});
}

选项 2,我可以在 promise 之前运行前置条件。我不确定我是否理解 Promise.reject() 的意图,但它允许我返回一个立即被拒绝的 promise 似乎符合要求。

function doStuff(data){
if (!data) {
return Promise.reject(new Error("Don't be an idiot"));
}

return new Promise((resolve, reject) => {
externalLibrary.doSomethingCallbackAsync(data, function(err, newData) {
if (err) {
return reject(err);
}
return resolve(newData);
});
});
}

出于可读性原因,我更喜欢选项 2,但我不完全理解 Promise.reject(),我担心选项 2 滥用它。重申一下,我正在寻找最佳实践解决方案。

最佳答案

I'm not certain I understand the intent of Promise.reject(), but it seems to fit the bill here

您理解正确。它明确适用于此类用例。努力吧,它是最佳实践。

选项 2 的优点是它与已经返回 promise 的 API 一起工作时更干净(想想 return externalLibrary.doSomethingAsync(data)),并且不太可能落入 Promise constructor antipattern .

关于javascript - 使用 ES6 Promises 惯用地处理前置条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com