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

标签 javascript promise

我遇到一种情况,我正在构建一个基于 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/

相关文章:

javascript - 在返回函数结果之前是否必须将其分配给变量?

javascript - 无法在 Ubuntu 20.04 上安装 json-server

javascript - 如何从 JS ERB 中执行辅助方法?

javascript - 如何使用 jQuery 包含两个属性

javascript - Promise.all()的回调什么时候触发

javascript - 如何使用异步代码在 forEach 循环上进行 promise /回调

javascript - 在运行下一个突变之前重置值

reactjs - 当 Apollo 获取的数据通过 React 和 GraphQL 准备就绪时

javascript - 在 Node 中,使用 Q 使 2 个函数并行工作,但只等待第一个函数履行其 promise

Javascript - 如何使用循环正确处理 promise ?