用 ES6 承诺以习惯方式处理先决条件
Idiomatically handling pre-conditions with ES6 Promises
我是ES6承诺的新手,一直在做研究。我有一些在 NodeJS 中执行的代码可以执行一些异步工作,但我有一些必须首先检查的先决条件。我正在寻找处理这个问题的惯用最佳实践(如果存在这样的事情)以及一些推理。我希望获得理解,因为我已经有了工作代码。
请考虑以下虚构片段:
function doStuff(data, cb) {
if (!data) {
return cb(new Error("Don't be an idiot"));
}
externalLibrary.doSomethingCallbackAsync(data, cb);
}
如果我把它转化为应许之地,我看到两个选择。
选项1,我可以在承诺中包含前提条件。
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()
的意图,但它似乎符合这里的要求,允许我返回立即被拒绝的承诺。
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 滥用它。重申一下,我正在寻找最佳实践解决方案。
我不确定我是否理解
Promise.reject()
的意图,但它似乎符合这里的要求
你已经理解正确了。它是为这样的用例明确制作的。去吧,这是最好的做法。
选项 2 的优点是,它与已经返回承诺的 API 一起工作得更干净(想想return externalLibrary.doSomethingAsync(data)
),并且不太可能落入 Promise
构造函数反模式。
相关文章:
- 在承诺链中处理早期回报的最佳方式
- 如何处理javascript中的循环引用,类似于Excel提供迭代限制的方式
- 如何启用Emmet'的选项卡键处理程序(HTML快捷方式)
- 在Javascript HTML5+Canvas中处理精灵鼠标点击的最佳方式
- 如何以 Angular2 方式处理 ajaxStart 和 ajaxStop 事件
- 我怎样才能以非阻塞的方式处理数字
- 如何制作一个JavaScript函数,处理多组输入,以同样的方式进行数学处理
- React是装载前处理空对象的最佳方式
- 如何使用javascript中的间隔以顺序方式处理websocket响应
- 为什么'这'与函数对象一起使用时会有不同的处理方式
- 处理多次单击事件的最佳方式
- 用 ES6 承诺以习惯方式处理先决条件
- Internet Explorer 11 根据开发人员工具是否打开而以不同的方式处理 jQuery
- 以 MVVM 方式处理 html5 视频标签的正确方法是什么?
- 使用 jQuery 延迟对象以串行方式处理 jQuery 集合/数组
- 如何以正确的方式处理Chrome X-XSS-Protection
- 如何以编程方式处理net::ERR_INSECURE_RESPONSE
- 以RESTful的方式处理模型关系
- PubSub.js的多个订阅,或者以不同的方式处理多个回调的等待
- 在每个块的handlebas#中以不同的方式处理列表的最后一个元素