我的代码:
class MyPromise extends Promise {
constructor(func) {
super(func);
}
SomePromiseExtensionMethod() {
// do stuff...
}
}
let test = async function() {
let promise = new MyPromise(function (resolve) {
console.log('foo');
resolve();
});
console.log('start printing:');
await promise;
};
test();

我倾向Promise
并希望创建一个派生自Promise
类的课程。
我的问题:在我致电foo
之前,有没有办法延迟打印await promise
?
更新
我想创建这个类,因为我想在对象是Promise
时运行另一个方法。 (就像:mypromise.SomePromiseExtensionMethod()
)。
更新2:我的真实项目:
let Task = (function () {
let __data = {};
__data.Run = function (...args) {
if (args.length) {
let func = args[0];
return new Task(func);
}
};
class Task extends Promise {
constructor(action) {
super(action);
}
static set Run(value) {
return __data.Run;
}
static get Run() {
return (...args) => __data.Run.call(this, ...args);
}
}
return Task;
}());
let test = async () => {
let task = Task.Run(r => r(console.log('foo')));
console.log('start printing');
await task;
};
test();

答案 0 :(得分:2)
在我致电
foo
之前,有没有办法延迟打印await promise
?
是的,这被称为"懒惰"承诺。请注意,await
只是用于调用then
方法的糖,所以我们可以通过覆盖then
方法来执行此操作,然后才运行执行程序回调:
class MyPromise extends Promise {
constructor(func) {
let run;
super((resolve, reject) => {
run = () => func(resolve, reject);
});
this.run = run;
}
then(onfulfilled, onrejected) {
const run = this.run;
if (run) {
this.run = null;
run();
}
return super.then(onfulfilled, onrejected);
}
}
(async function test() {
let promise = new MyPromise(function (resolve) {
console.log('foo');
resolve();
});
console.log('start printing:');
await promise;
}());
请仅将此用于学习练习,我不建议在实际项目中使用此模式。
答案 1 :(得分:0)
您可以使用then
:
class MyPromise extends Promise {
constructor(func) {
super(func);
}
}
let test = async () => {
let promise = new MyPromise(function (resolve) {
resolve();
}).then(_ => console.log('foo'));
console.log('start printing:');
await promise;
};
test();
注意:扩展Promise对象是一个坏主意。