gpt4 book ai didi

javascript - 我的 Promise 实现是否符合规范?

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

我正在尝试创建一个符合当前规范的 Typescript promise 实现(实际上是一个 polyfill)(我使用了这些 http://promises-aplus.github.io/promises-spec/)。

应该可以,代码在这里https://gist.github.com/ilmattodel93/dbefa9eb86715f76e10e , 但我无法理解规范的 2.2.7 子点。只有种族和所有静态方法应该缺失。

请有人能向我解释 2.2.7 子点并告诉我是否正确实现了它们?

感谢您的关注和时间,马蒂亚。

最佳答案

让我们让代码来说话。假设我们有一个名为 promise1 的 promise 。根据规范:

来自规范

then must return a promise

self 解释:

promise2 = promise1.then(onFulfilled, onRejected);

来自规范

If either onFulfilled or onRejected returns a value x, run the Promise Resolution Procedure [[Resolve]](promise2, x).

如果我们有

promise2 = promise1.then(()=>123,()=>123);

然后你可以做

promise2.then((x)=> /* x should be 123 */, (x)=> /* will not be called */);

来自规范

If either onFulfilled or onRejected throws an exception e, promise2 must be rejected with e as the reason.

如果我们有

promise2 = promise1.then(()=> { throw new Error('message'); }, ()=> { throw new Error('message'); });

然后你可以做

promise2.then((x)=> /* should not be called */, (x)=> /* x will be equal to "new Error('message')" */);

来自规范

If onFulfilled is not a function and promise1 is fulfilled, promise2 must be fulfilled with the same value.

如果我们有

promise1 = new Promise(function(resolve,reject) { resolve(123) });
promise2 = promise1.then(null,null);

然后我们可以做

promise2.then((x)=> /* x should be 123 */, (x)=> /* should not be called */);

来自规范

If onRejected is not a function and promise1 is rejected, promise2 must be rejected with the same reason.

如果我们有

promise1 = new Promise(function(resolve,reject) { reject(123) });
promise2 = promise1.then(null,null);

然后我们可以做

promise2.then((x)=> /* should not be called */, (x)=> /* x should be 123 */);

为了验证您是否实现了所示的编写测试。我建议将 Mocha 与 Chai 结合使用。

关于javascript - 我的 Promise 实现是否符合规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23258374/

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