gpt4 book ai didi

javascript - 在没有 new 关键字的情况下创建 promise

转载 作者:行者123 更新时间:2023-11-29 17:48:39 25 4
gpt4 key购买 nike

看完fun fun function , 我决定不使用 new 关键字。

但这里有一个如何使用 promise 的基础示例:

var promise = new Promise(function(resolve, reject) {
// do a thing, possibly async, then…

if (/* everything turned out fine */) {
resolve("Stuff worked!");
}
else {
reject(Error("It broke"));
}
});

问:如何在不使用 new 关键字的情况下创建 promise ?

最佳答案

作为一个纯粹的学术问题,您可以通过创建一个thenable(您不需要new)来解决new,然后您可以使用 Promise.resolve 将 thenable 转换为完整的 promise:

function createPromise(executor) {
let callback;
function resolve(resolution, arg) {
Promise.resolve().then(function () {
callback[resolution](arg);
});
}
try {
executor(resolve.bind(null, "fulfill"), resolve.bind(null, "reject"));
} catch(e) {
resolve("reject", e);
}
return Promise.resolve({
then: function (fulfill, reject) {
callback = { fulfill, reject };
}
});
}

// Demo
var prom1 = createPromise(function (resolve, reject) {
setTimeout(function () { resolve("Stuff worked!") }, 1000);
});
var prom2 = createPromise(function (resolve, reject) {
setTimeout(function () { reject("It broke") }, 1000);
});

prom1.then(function (v) { console.log(v); });
prom2.catch(function (err) { console.log(err) });
console.log('waiting for promises to resolve');

有些人有理由避免使用new,但如果那必须导致上面的代码,那么显然应该允许一些异常(exception)。除非有人有更好的想法在不使用 new 的情况下创建 promise,否则必须再次实现一些 Promise 特性(例如 try ... catchthen 回调的异步 调用)只能解决 new。这似乎是个坏主意。

结论:只需使用 new 来创建新的 promise。

关于javascript - 在没有 new 关键字的情况下创建 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46308484/

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