TypeError:无法读取全局变量的未定义属性'then'

时间:2019-12-17 22:58:30

标签: javascript typescript promise

我正在尝试检查bridgeObject.checkStatus 全局变量是否已经调用了isRunning

如果没有,我将其命名为isRunning并将其设置为true。 然后,当不更改时,它将变回false。

if (!this.isRunning){
  this.isRunning = true;
  bridgeObject.checkStatus().then(() => {
    this.isRunning = false;
  });
} else {
  console.log('Not allowed to checkstatus, Value isRunning= ' + this.isRunning); 
}

但是我收到此错误:

  

TypeError:无法读取全局变量的undefined属性“ then”

我是编程的超级新手,所以我无法根据这里的其他答案弄清楚为什么会出现此错误以及如何处理此错误。

更新:

这是checkStatus的作用

    checkStatus: function (mediaUrl) {
  console.log('bridge checkStatusOnDevice');
  if (typeof (Device) != 'undefined' && Device!= null) {
    Device.checkStatusOnDevice();
  }
  else
  {
    deviceStatusSuccess();
  }
},

1 个答案:

答案 0 :(得分:1)

您的checkStatus函数不返回任何内容-因此结果为undefined。然后,您尝试根据then函数的结果调用checkStatus,这会导致错误消息。

如果checkStatus函数正在异步运行,并且您想对结果调用then,则需要使它返回一个promise。

这可能看起来像这样:

checkStatus: function (mediaUrl) {
  return new Promise((resolve, reject) => {
     console.log('bridge checkStatusOnDevice');

     if (typeof (Device) != 'undefined' && Device!= null) {
       // call resolve/reject when the following call succeeded/failed respectively
       Device.checkStatusOnDevice();

       // This COULD be something like this, if the API is callback based:
       // Device.checkStatusOnDevice(() => resolve(), () => reject())
     } else {
       // call resolve/reject when the following call succeeded/failed respectively
       deviceStatusSuccess();
     }
  });
},