窗口未定义:错误与承诺

时间:2016-11-17 19:54:08

标签: javascript node.js promise

我试图了解javascript承诺,因为我之前从未使用过它们。 现在,我已经查看了几个教程,在this one中我决定尝试代码,但是当我运行它时:

if (window.Promise) { // Check if the browser supports Promises
  var promise = new Promise(function(resolve, reject) {
    //asynchronous code goes here
  });
}
使用命令node promise.js在Windows控制台中

我可以看到此错误:

C:\Users\antobbo\Desktop\pdfSearch\promise.js:1
(function (exports, require, module, __filename, __dirname) { if (window.Promise) { // Check if the browser supports Promises
                                                                  ^

ReferenceError: window is not defined
    at Object.<anonymous> (C:\Users\antobbo\Desktop\pdfSearch\promise.js:1:67)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:394:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:509:3

C:\Users\antobbo\Desktop\pdfSearch>

这是否意味着我做错了什么? 感谢

1 个答案:

答案 0 :(得分:0)

您正在使用期望在浏览器中的代码,因为那里将定义window

如果这是node.js,那么您可能已经知道您正在运行的node.js版本,因为您控制了自己的环境,因此您可以提前知道您的节点版本是否已构建 - 在承诺与否。

如果您正在为其他人编写代码并且您可能不知道它运行的node.js的版本,那么您可能只需要Promise polyfill来处理您的检查。在NPM上有几个,或者你可以使用更全功能的库,如Bluebird(这是我使用的,甚至比本机承诺更先进)。

如果你真的想测试node.js中是否存在Promise,那么你可以这样做:

// Check if the node.js Promises
if (typeof Promise === "function") { 
    // yes native promises are supported
}