首页 > 解决方案 > 辅助函数不返回响应,但使用函数显示结果

问题描述

我有这个辅助功能:

const listFileKeysInSpaceByPrefix = async (prefix) => {
    var params = {
        Bucket: process.env.S3_BUCKET_NAME,
        Prefix: prefix,
    };
    let fileKeys;
    await s3.listObjects(params, function (err, data) {
        if (err) {
            console.log(err, err.stack);
            next(err);
        }
        let keys = [];
        data["Contents"].forEach(function (obj) {
            keys.push(obj.Key);
        });
        console.log("key1", keys);
        fileKeys = keys;
    });
    return fileKeys;
};

我在这样的路线中调用了辅助函数:

const keyToBeDeleted = await listFileKeysInSpaceByPrefix(uploadSpaceFolder);
console.log("keys",keyToBeDeleted);

然而,我控制台上的结果如下所示:

keys undefined
key1 ['adamter/rr0.png', 'adamter/rt0.png']

当我调用函数时,我需要在响应中获取数组,但我似乎没有找到解决方法。

标签: javascriptnode.js

解决方案


尝试使用回调函数。

const listFileKeysInSpaceByPrefix = (prefix, callBackFn) => {
  var params = {
    Bucket: process.env.S3_BUCKET_NAME,
    Prefix: prefix,
  };
  s3.listObjects(params, function (err, data) {
    if (err) {
        console.log(err, err.stack);
        next(err);
    }
    let keys = [];
    data["Contents"].forEach(function (obj) {
        keys.push(obj.Key);
    });
    console.log("key1", keys);
    callBackFn(keys);
  });
};

function yourFunction() { 
  function callBackFn(keyToBeDeleted) { 
    // access keyToBeDeleted 
    // add your logic here 
  }

  listFileKeysInSpaceByPrefix(uploadSpaceFolder, callBackFn); 
}

推荐阅读