异步函数返回promise,可不执行难以判断。 Reflect对象对此好像然并卵!各位大大有黑科技的高招??
回复 (26)
X
1
X
引用 dengnan123不跑起来怎么知道呢
// 模拟一个接口
return new Promise(resolve => {
setTimeout(() => {
resolve(4);
}, 4000);
}).then((res) => {
console.log(res, '业务代码');
});
}
在其他组件判断这个onClick方法是否return个promise
用typeof this.props.onClick().then 这种方法会执行onclick 这个方法 但是不执行的前提如何判断这个onclick返回个promise还是一个一般的函数
X
onClick = () => { // 模拟一个接口 return new Promise(resolve => {
setTimeout(() => {
resolve(4);
}, 4000);
}).then((res) => {
console.log(res, '业务代码');
});
}
在其他组件判断这个onClick方法是否return个promise
用typeof this.props.onClick().then 这种方法会执行onclick 这个方法 但是不执行的前提如何判断这个onclick返回个promise还是一个一般的函数
D
不跑起来怎么知道呢
W
对于调用方来说,你不告诉我结果类型,也不写(ts)返回类型签名,更不写备注,我管你是什么类型,直接打回去。 面向靠猜接口开发?
X
请问楼主解决了吗 我也遇到这个问题了 就是判断函数是return 个promise 还是一个普通函数
F
toString然后分析函数代码
X
引用 zy445566co里面的代码,我用过效果挺好,async你可以用上面方法判断,但其实最终也是转换成promise 来自酷炫的 CNodeMD
@zy445566 @ta7sudan 谢谢帮忙! ta7sudan, 前提是不执行函数哦
Z
co里面的代码,我用过效果挺好,async你可以用上面方法判断,但其实最终也是转换成promise
function isPromise(obj) {
return 'function' == typeof obj.then;
}
function isGenerator(obj) {
return 'function' == typeof obj.next && 'function' == typeof obj.throw;
}
function isGeneratorFunction(obj) {
var constructor = obj.constructor;
if (!constructor) return false;
if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true;
return isGenerator(constructor.prototype);
}
来自酷炫的 CNodeMD
T
function isAsyncFunction(fn) {
return fn[Symbol.toStringTag] === 'AsyncFunction';
}
你想要的应该是这个吧
X
引用 atian25JS 是弱类型的,返回值你是没法判断出来的。 这个问题属于 X Y 问题了,还是提出你最原始的需求吧
JS 是弱类型的,返回值你是没法判断出来的。
@atian25 同意这说法
最近GO看多了
A
@atian25 @justjavac 运行之后返回 promise 的函数怎么可能在不运行的情况下判断出来。。。不可能的。
A
J
引用 atian25JS 是弱类型的,返回值你是没法判断出来的。 这个问题属于 X Y 问题了,还是提出你最原始的需求吧
@atian25 万一最初需求是“我想普通函数直接调用,异步函数用 await 调用”,那就尴尬了
A
JS 是弱类型的,返回值你是没法判断出来的。
这个问题属于 X-Y 问题了,还是提出你最原始的需求吧
J
A
看源码
J
引用 xinggsf@justjavac 是啊 异步函数不过是语法糖,返回的也是promise
@xinggsf 如果是这样呢?
function fn(p) {
if (p > 0) {
return p;
} else {
return new Promise .....
}
}
X
J
你想实现的是:如何判断一个函数的返回值是不是 Promise?
J
X
X
引用 justjavac
@justjavac 感谢大大的回复! 但这方法没办法判断返回promise的函数啊,如:
const sleep = ms => new Promise(resolve => {
setTimeout(resolve, ms);
});
J
function isAsync(fn) {
return fn.constructor.name === 'AsyncFunction';
}
M
Promise.resolve
参与回复
登录后即可参与回复。登录