gpt4 book ai didi

javascript - ES6 Promise 自动后处理/克隆结果

转载 作者:行者123 更新时间:2023-11-28 15:23:26 25 4
gpt4 key购买 nike

我遇到一种情况,我正在构建一个基于 ES6 JS Promises 的数据层,该数据层从网络获取数据。我通过 url 在内部缓存所有 Promise。

除了一件事之外,一切似乎都运行良好。我想确保来自网络层的数据是从网络检索到的数据的副本/克隆,并且我显然不想在实现 Promise 的 then 处理程序的客户端代码中的任何地方都这样做。

我想对此进行设置,以便处理程序自动获取缓存数据的副本。

为了对此添加一个扭曲,我希望它可以在数据层内的 url 基础上进行配置,以便某些 Promise 执行额外的后处理副本,而其他 Promise 仅返回原始结果。

任何人都可以建议适当的实现来实现这一目标吗?我应该提到的是,每次新客户提出要求时,我都希望获得原始原始结果的新副本。

当前简化的伪实现如下所示

getCachedData(url){
if (cache[url]) {
return cache[url];
} else {
var promise = new Promise(function(resolve,reject){
var data = ...ajax get...;
resolve(data);
});
cache[url] = promise;
}

getCachedData(url).then(result=>{
here I want the result to be a copy of data I resolved the original promise with.
});

最佳答案

结构如下:

function retrieveCopiedData () {
// getDataFromServer is your original Promise
return getDataFromServer().then(function (value) {
// use a library of your choice for copying the object.
return copy(value);
})}
}

这意味着 retrieveCopiedData 的所有使用者都将收到从 retrieveCopiedDatathen() 处理程序返回的值。

retrieveCopiedData().then(function (value) {
// value is the copy returned from retrieveCopiedData's then handler
})

您可以根据需要向 retrieveCopiedData 添加条件逻辑。

关于javascript - ES6 Promise 自动后处理/克隆结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30230994/

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