【发布时间】:2018-07-16 17:52:27
【问题描述】:
这里是一个示例代码:
function getExtendedPromise() {
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve('Hi');
}, 1000)
});
promise.on = () => {
console.log('on listener called')
};
console.log('getExtendedPromise: ', promise);
return promise;
}
async function callExtendedPromise() {
await Promise.resolve();
return Promise.resolve(getExtendedPromise())
}
const promise = callExtendedPromise();
console.log('callExtendedPromise Try: ', promise);
callExtendedPromise().then((result) => {
console.log('Final Result: ', result)
});
日志结果:
callExtendedPromise Try: Promise { <pending> }
getExtendedPromise: Promise { <pending>, on: [Function] }
getExtendedPromise: Promise { <pending>, on: [Function] }
Final Result: Hi
从上面的示例中可以看出,当对象在 getExtendedPromise() 函数中记录时,它具有on 属性。然后我将它包装在Promise.resolve 中,并将其返回给调用者,因为我希望调用者获取具有on 属性的Promise 对象。
但是,当调用 callExtendedPromise() 时,我无法使用 on 属性访问包装好的承诺。
如何使用 on 属性获取该 promise 实例?
getExtendedPromise() 是库的一部分,不开放修改。
P.S.扩展promise的结构选择不是我在原始代码中的选择,而是从库中返回的结构。
【问题讨论】:
-
在顶部的 'gEP()' 中,尝试返回一些东西而不是 resolve 。 EX 返回另一个方法(异步),该方法解析为包含所需属性的对象。
-
getExtendedPromise()是库的一部分,不开放修改。 -
@JoshLee 这个问题和我的问题和我看到的完全不同。
-
使用 ad-hoc 方法装饰 Promise 的实用性非常有限,因为您已经发现 - 它充其量是空灵的。要问自己的真正问题是如何从代码库中清除对
.on()的使用。
标签: javascript node.js promise