node.js - 在异步应用程序中定义解析/拒绝的正确方法是什么
问题描述
我正在尝试在 NodeJS 中构建一个金融系统。我正在重构我的代码,从使用回调到使用 Promises 来最小化嵌套。但我正在努力理解 Resolve 或 Rejection 的正确含义应该是什么。比方说,在我在借记之前检查余额的情况下,余额不足的结果是解决还是拒绝?Resolve/Reject 是否与代码执行的成功或失败或逻辑过程的成功或失败有关?
解决方案
使用resolve
或reject
取决于您的实现。
回调的基本Promise
升级:
return new Promise(function (resolve, reject) {
myFunction(param, function callback(err, data) {
if (err)
reject(err);
else
resolve(data);
})
})
捷径是util.promisify(myFunction)
const util = require('util');
function myFunction(param, callback) { ... }
myFunctionAsync = util.promisify(myFunction)
myFunctionAsync(param).then(actionSuccess).catch(actionFailure)
如您所见,reject
用于传递错误,并resolve
传递结果。
您可以使用resolve
/ reject
:
function finacialOperationAsync() {
return new Promise((resolve, reject) => {
const balance = checkBalance();
if (balance < 0)
reject(new Error('Not enough balance'))
else
finacialOperation((err, res) => {
if (err)
reject(err);
then
resolve(res);
});
})
}
finacialOperationAsync().then(actionOnSuccess).catch(actionOnFailure)
或者您可以使用true
/false
和async
/ await
:
function checkBalanceAsync() {
return new Promise(resolve => {
resolve(checkBalance() >= 0);
})
}
async function finacialOperationAsync() {
if (await checkBalanceAsync()) {
const res = await finacialOperationAsync();
return actionOnSuccess(res);
} else
return actionFailure();
}
推荐阅读
- powershell - PowerShell 任务计划程序作业无法启动。附加数据:错误值:2147944187
- spring-data-rest - 使用 querydsl 和 spring 数据搜索 A 或 B 的位置
- sqlite - 我需要检索最后一个数据行单个数据
- python - 在 python 代码中更改“所有”seaborn 图的大小
- pytorch - 如何在不安装 pytorch 的情况下使用 pytorch 预训练模型?
- java - 在 Java 8 比较器中添加 Optional.isPresent()
- jquery - 使用ajax从vue组件解析数据
- php - 多个计数和求和 MySQL 函数在 MySQL 结果中使用多个连接返回错误值
- google-bigquery - BigQuery - 在连接谓词中使用 SQL UDF
- git - 如何实现 git-hook 以使用“无快进”更改合并消息?