首页 > 解决方案 > 将承诺链转换为异步等待

问题描述

我想将承诺转换为异步等待,但我无法找到正确的方法来确保每个调用都有效。

我正在尝试在删除用户时从 mongodb 集合和 s3 存储桶中删除与用户相关的所有数据。

这段代码是由其他人编写的,我正在尝试将其重构为更易读和更有效的状态。

"use strict";

const deleteById = require("./logic/deleteById");
const deleteFootPrint = require("./logic/deleteFootPrint");
const fileUpload = require("../../helpers/fileUpload");
const deleteDocuments = require("./logic/deleteDocuments");
const deleteAssignments = require("./logic/deleteAssignments");
const deleteQueries = require("./logic/deleteQueries");
const deleteStudyProgress = require("./logic/deleteStudyProgress");

module.exports = (config, services, models) => {
  return (req, res, next) => {
    return deleteById(models, req.params)
      .then((user) => {
        return deleteFootPrint(models, req.params)
          .then(() => {
            
            if (!user["profile_key"]) {
              res.status(200).json({ success: true });
            } else {
              console.log(user["profile_key"]);
              fileUpload
                .deleteProfilePicture(user.profile_key, services.s3, config)
                .then(() => {
                  fileUpload
                    .deleteUserDocuments(user.profile_key, services.s3, config)
                    .then(() => {
                      fileUpload.deleteUserAssignments(
                        user.profile_key,
                        services.s3,
                        config
                      );
                    });
                })
                .catch((err) => {
                  next(err);
                });
            }
          })
          .then(() => {
            return deleteDocuments(models, req.params).then(() => {
              return deleteAssignments(models, req.params).then(() => {
                return deleteQueries(models, req.params).then(() => {
                  return deleteStudyProgress(models, req.params)
                    .then((results) => {
                      res.status(200).json({ success: true });
                    })
                    .catch((err) => {
                      next(err);
                    });
                });
              });
            });
          })
          .catch((err) => {
            next(err);
          });
      })
      .catch((err) => {
        next(err);
      });
  };
};

标签: javascriptnode.jsasync-await

解决方案


像这样的东西...

module.exports = (config, services, models) => {
  return async (req, res, next) => {
    const user = await 
    deleteById(models, 
    req.params)
      
    await deleteFootPrint(models, 
    req.params)
         
   And so on...

推荐阅读