首页 > 解决方案 > 在异步应用程序中定义解析/拒绝的正确方法是什么

问题描述

我正在尝试在 NodeJS 中构建一个金融系统。我正在重构我的代码,从使用回调到使用 Promises 来最小化嵌套。但我正在努力理解 Resolve 或 Rejection 的正确含义应该是什么。比方说,在我在借记之前检查余额的情况下,余额不足的结果是解决还是拒绝?Resolve/Reject 是否与代码执行的成功或失败或逻辑过程的成功或失败有关?

标签: node.jspromise

解决方案


使用resolvereject取决于您的实现。

回调的基本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/falseasync/ 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();
}

推荐阅读