javascript - 函数包装承诺得到未定义的类型然后
问题描述
我将一个fn
作为参数传递给我的树遍历函数中的每个节点。我正在尝试fn
通过使用来检查是否是一个承诺typeof fn.then === 'function'
(如果是,我将需要使用一个“有希望的”版本的遍历,如此处所示)。作为 的定义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>
解决方案
我试图检查某事是否是一个承诺;如果是,我将需要使用“有希望”的遍历版本
不要那样做。从同一个函数返回不同的类型(result 与 promise-for-result)是非常令人困惑的,并且在函数内部的“正常”和“有希望”版本之间动态切换也不会使您的代码更易于维护。
只需提供两种不同的函数,一种是同步的,它期望从它的回调中获得纯值,另一种是异步的,它期望它的回调返回 Promise。在那里,您只需将任何返回值转换为使用承诺,Promise.resolve(…)
而不是测试它是否是承诺(或类似的东西)。
推荐阅读
- html - gmail中的电子邮件签名问题
- php - 是否可以在 symfony 4 表单集合中动态生成选择?
- c - 在将文件写入 SD 卡时实现故障/安全方法
- mysql - CakePHP:使用包含查找关联数据
- jenkins - 詹金斯 git 凭证在阶段工作,而不是在下一个
- mysql - Aurora MySql 数据库备份大小急剧增加
- python - 尽管在 os.environ 中设置了代理,但 Cartopy 无法下载代理后面的数据
- php - 记录所有 API 请求和响应 + Slim 框架
- r - 未经授权:需要身份验证 - 尝试拉取或运行公共图像
- java - hibernate中的LEFT JOIN表映射