【发布时间】:2018-12-23 04:04:12
【问题描述】:
我传递了一个fn 作为参数,以应用于我的树遍历函数中的每个节点。我正在尝试使用typeof fn.then === 'function' 来检查fn 是否是一个承诺(如果是,我将需要使用here 所示的“有希望”的遍历版本)。作为fn的定义,如果我将一个新的promise包装到一个接受node参数的函数中,上面的检查返回undefined而不是function。
<script>
let promise1 = new Promise((resolve, reject) => {
let y = 2;
resolve(y);
});
let promise2 = function(y){
return new Promise((resolve, reject) => {
resolve(y);
});
};
alert ('typeof promise1.then: ' + typeof promise1.then + '\ntypeof promise2.then: ' + typeof promise2.then);
</script>
【问题讨论】:
-
"Demo code is here"应该是minimal reproducible example而不是外部资源的链接
-
@Andreas -- 通常我使用 plunker 作为演示代码,我看到其他人在这里也这样做。如果您可以简单地看一下,演示代码本身是完整且可验证的。我不知道为什么我在发布后 5 秒内得到一个“-1”;我觉得你很不负责任。
-
当然你需要检查函数的返回值是否是一个promise,而不是检查函数是否是一个promise。
-
我认为您必须调用该函数并查看返回值是什么。希望函数不可能有时返回承诺,有时返回其他内容。
-
避免使用可能返回承诺的函数或反过来返回承诺的函数。为了便于阅读,您应该始终返回一种类型。例如,您可以将原本会直接返回的 Promise 包装到一个函数中。您能否提供一个更详细(但尽可能简短)的示例,如何调用这样的函数?除了使用
foo instanceof Promise更好地探测承诺之外。
标签: javascript promise