Sử dụng các lời hứa của ES6, làm cách nào để tạo một lời hứa mà không xác định logic để giải quyết nó? Đây là một ví dụ cơ bản (một số 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 :(
}
Nó dễ dàng thực hiện với các thư viện hứa hẹn khác. Ví dụ của 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);
}
Cách duy nhất tôi có thể thấy để làm điều này là lưu trữ hàm giải quyết ở đâu đó trong trình thực thi của lời hứa nhưng điều đó có vẻ lộn xộn và tôi không chắc nó được xác định khi nào chính xác hàm này được chạy - nó luôn chạy ngay lập tức khi đang xây dựng?
Cảm ơn.