函数包装承诺会得到未定义的typeof

时间:2018-12-22 16:54:34

标签: javascript promise

我传递了一个fn作为参数,以应用于我的树遍历函数中的每个节点。我试图通过使用fn来检查typeof fn.then === 'function'是否是一个承诺(如果是,我将需要使用here所示的“有希望的”遍历版本)。作为fn的定义,如果我将一个新的Prom包装到接受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>

1 个答案:

答案 0 :(得分:2)

  

我正在尝试检查某物是否是应许;如果是这样,我将需要使用“有希望的”遍历版本

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

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