gpt4 book ai didi

javascript - 如何延迟执行Promise内部的代码?

转载 作者:行者123 更新时间:2023-12-01 03:13:36 25 4
gpt4 key购买 nike

我的代码:

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();

最佳答案

Is there a way to delay printing foo until I call await promise?

是的,这被称为“惰性” 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;
}());

请仅将其用于学习练习,我不建议在实际项目中使用此模式。

关于javascript - 如何延迟执行Promise内部的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45677980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com