gpt4 book ai didi

javascript - JS 中的柯里化(Currying) : Pass additional variable to callback without changing the callback signature

转载 作者:行者123 更新时间:2023-12-01 03:39:49 26 4
gpt4 key购买 nike

我正在使用 AWS S3 API 包装器。要从云下载文件,我调用以下包装器:

aws.s3.downloadFile(bucket, fileName, cbDownloadOk, cbDownloadErr);

在此函数内,我们构建参数的容器,然后调用官方 AWS S3 API:

s3.listObjectsV2(params, function(err, data) {
if (err) {
cbDownloadErr(err); // an error occurred
} else {
cbDownloadOk(data); // successful response
}
});

现在我希望能够打印下载文件的名称,例如:

const cbDownloadOk = function (data) {
console.log("File " + fileName + " downloaded");
}

问题是我无法更改包装器的实现,因此无法更改 cbDownloadOk 回调的签名。

有没有办法在不改变包装器实现的情况下将fileName传递给cbDownloadOk?使用全局变量是唯一的方法吗?

更新:
我们可以从答案中了解到,这个问题涉及 currying .

最佳答案

您正在寻找的可能是curried功能。您可以使用 filename 调用它,它会给您您想要的结果:函数只接受一个参数 data,并且可以访问附加参数 (文件名)。

const mySuccessCb = filename => data => {
// data and name are available here
console.log("File " + filename + " downloaded");
}

用法:

aws.s3.downloadFile(myBucket, filename, mySuccessCb(filename), cbDownloadErr);

关于javascript - JS 中的柯里化(Currying) : Pass additional variable to callback without changing the callback signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43985841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com