【发布时间】:2017-03-22 00:43:10
【问题描述】:
我需要一个只为一个模块调用一次的初始化函数。此函数是一个承诺,由执行函数调用。如果 execute 被调用两次,第二次必须等待初始化然后继续执行。
我写了这段代码,但是第二次调用 execute 总是在等待并且永远不会返回。我错过了什么?
var initialized = false;
var initializing = false;
var initializationPromise;
var init = function () {
initializing = true;
return q.promise(function (resolve) {
// simulate initialization
setTimeout(function () {
// initialized
initialized = true;
resolve();
}, 1000);
}).fin(function () {
initializing = false;
});
};
var execute = function () {
return q.promise(function (resolve, reject, notify) {
if (initialized) {
// already initialized
resolve();
} else {
if (!initializing) {
// initializing
initializationPromise = init().then(function () {
// simulate execution
setTimeout(function () {
resolve();
}, 1000);
}, function (reason) {
reject(reason);
});
} else {
// Wait : initializing in progress
return initializationPromise;
}
}
});
};
execute().then(function () {
// This is executed
});
execute().then(function () {
// This is never executed
});
【问题讨论】:
-
“这个函数是一个promise”你的意思是“这个函数返回一个promise”?
标签: javascript promise q