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