最佳答案
使用 ES6承诺,如何在不定义解决它的逻辑的情况下创建承诺?下面是一个基本的例子(一些 TypeScript) :
var promises = {};
function waitFor(key: string): Promise<any> {
if (key in promises) {
return promises[key];
}
var promise = new Promise(resolve => {
// But I don't want to try resolving anything here :(
});
promises[key] = promise;
return promise;
}
function resolveWith(key: string, value: any): void {
promises[key].resolve(value); // Not valid :(
}
使用其他承诺库很容易做到这一点,例如 JQuery:
var deferreds = {};
function waitFor(key: string): Promise<any> {
if (key in promises) {
return deferreds[key].promise();
}
var def = $.Deferred();
deferreds[key] = def;
return def.promise();
}
function resolveWith(key: string, value: any): void {
deferreds[key].resolve(value);
}
我能想到的唯一方法就是把这个函数存储在承诺执行者的某个地方,但是这看起来很混乱,而且我不确定这个函数是在什么时候运行的——它总是在构造的时候立即运行吗?
谢谢。