【发布时间】:2019-08-27 06:42:40
【问题描述】:
最近,我看到了一段在全栈开发人员面试中被问到的代码。 它涉及创建一个 Promise,候选人应在其中实施, 传递一个解析函数,然后链接 2 个。
我尝试非常天真地实现 Promise,只是为了使代码正常工作。 创建了一个接受解析器函数的 ctor, 创建了一个接受回调并返回 Promise 的 Then 函数, 并简单地调用解析器函数的回调。
class MyPromise {
constructor(resolver) {
this.resolver = resolver;
}
then(callback) {
const result = new MyPromise(callback);
this.resolver(callback);
return result;
}
}
promise = new MyPromise(
(result) => {
setTimeout(result(2), 500);
});
promise.then(result => {
console.log(result);
return 2 * result;
}).then(result => console.log(result));
预期结果是 2,4 - 就像使用真正的 Promise 操作一样。 但我得到2,2。 我无法弄清楚如何获取第一个“then”的返回值并将其传递。
【问题讨论】:
-
什么是
r2...?代码的哪一部分是给你的? -
您的承诺概念不正确。看看Distilling how a promise works
-
共享代码对您有用吗?甚至 setTimeout 也接受回调。您能否发布对您有用并产生 2,2 的代码
-
@trincot 我假设
r2应该是result -
@AZ_ 就是这样。刚刚编辑了误入的“r2”东西
标签: javascript promise