使用 ES6 Promises 惯用地处理前置条件
Idiomatically handling pre-conditions with ES6 Promises
我是 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.reject()
的意图,但允许我 return 一个立即被拒绝的承诺似乎符合这里的要求。
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 的优点是它与已经执行 return promises(想想 return externalLibrary.doSomethingAsync(data)
)的 API 一起工作得更干净,并且不太可能落入 Promise
constructor antipattern。
我是 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.reject()
的意图,但允许我 return 一个立即被拒绝的承诺似乎符合这里的要求。
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 的优点是它与已经执行 return promises(想想 return externalLibrary.doSomethingAsync(data)
)的 API 一起工作得更干净,并且不太可能落入 Promise
constructor antipattern。