首页 > 解决方案 > 函数包装承诺得到未定义的类型然后

问题描述

我将一个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>

标签: javascriptpromise

解决方案


我试图检查某事是否是一个承诺;如果是,我将需要使用“有希望”的遍历版本

不要那样做。从同一个函数返回不同的类型(result 与 promise-for-result)是非常令人困惑的,并且在函数内部的“正常”和“有希望”版本之间动态切换也不会使您的代码更易于维护。

只需提供两种不同的函数,一种是同步的,它期望从它的回调中获得纯值,另一种是异步的,它期望它的回调返回 Promise。在那里,您只需将任何返回值转换为使用承诺,Promise.resolve(…)而不是测试它是否是承诺(或类似的东西)。


推荐阅读