Promise的第一个调用者应该获取数据,随后的调用者应该等待

First caller to Promise should fetch data, subsequent should wait

本文关键字:调用者 等待 数据 Promise 获取 第一个      更新时间:2023-09-26

我在一个情况下,我的应用程序的多个部分希望访问数据。我希望第一个调用者发起从服务器获取,而随后的请求应该等待数据被获取。我怎么用Promise来做这个?

我试过这样做,但没有成功:

var promise = null;
var fetchComplete = false;
var data = null;
function getData() {
  if (fetchComplete) {
    return new Promise(function(resolve, reject) {
      resolve(data);
    });
  } else {
    if (promise === null) {
      promise = new Promise(function(resolve, reject) {
        getDataFromServer(function(response) { 
          fetchComplete = true;
          data = response;
        });
      });
    }
    else {
      return promise;
    }
  }
};

你可以这样使用闭包:

function getDataPromise() {
    return new Promise(function(resolve, reject) {
        getDataFromServer(resolve);
    });
}
var getDataCached = (function() {
    var fetchPromise = null;
    return function() {
        if (!fetchPromise) { 
            // Fetch data here and populate fetchPromise with an actual promise.
            fetchPromise = getDataPromise();
        }
        return fetchPromise;
    };
})();

第一次调用将填充fetchPromise闭包变量,而其余调用将简单地返回它。