javascript - 如何从异步函数返回扩展的 Promise 实例?
问题描述
我只是在玩弄我的框架的一些想法,假设我像这样扩展了 Promise 类
class cool_promise extends Promise {
cool_function() {
console.log("I am cool");
}
}
并有一个异步功能,如
async cool_function() {
return "functioning";
}
现在默认情况下,cool_function 在同步执行时只返回一个常规 Promise,但是是否可以让特定于我的框架的异步函数返回我扩展的 Promise 类?
解决方案
该async
关键字将始终导致函数返回本机 Promise。要返回一个自定义的 Promise,你的函数需要在没有声明async
的情况下直接返回 Promise。
您可以像平常一样编写异步函数,但在将它们作为框架接口的一部分公开之前,用返回 CoolPromise 的函数包装它们:
class CoolPromise extends Promise {
coolFunction ( ) {
return 'I am cool';
}
static decorate ( func ) {
return function (...args) {
return CoolPromise.resolve( func.call( this, ...args ) );
};
}
}
// Some module with an async function in it
const module = function Module ( ) {
async function foo( ) {
return 'bar';
}
// Decorate functions before exposing them from your modules
return {
foo: CoolPromise.decorate( foo )
};
}( );
// Verify that module.foo( ) returns a CoolPromise
(async ( ) => {
console.log( await module.foo( ) );
console.log( module.foo( ).coolFunction( ) );
})();
推荐阅读
- r - R 焦点函数:计算栅格单元和邻域之间的差平方并找到 3x3 窗口的平均值
- quic - Google Cloud Storage 是否提供对 QUIC 或 HTTP/3 的支持?
- sql - Oracle 查询根据条件和分组方式连接两个表
- python - 提高正则表达式的效率
- leaflet - 带有自定义图块的传单地图上的标记位置随着更高的缩放级别而变化
- php - 使用 phpword 创建多个表
- flutter - 颤振:飞镖正确转换为空安全我的课
- unit-testing - 突变测试中的胜任程序员假设是什么?
- time-series - 使用自动编码器在多变量时间序列中进行异常检测
- python-3.x - 有谁知道在网站上运行 python 脚本的方法?