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

时间:2015-07-14 08:06:11

标签: javascript asynchronous promise

我的应用程序的多个部分都需要访问数据。我希望第一个调用者从服务器启动提取,而后续请求应该等待提取数据。如何用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;
    }
  }
};

1 个答案:

答案 0 :(得分:3)

你可以使用这样的闭包:

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;
    };
})();

第一个invokation将填充fetchPromise闭包变量,而其余的只会返回它。