【问题标题】:TypeScript execution with inconsistent orderTypeScript 执行顺序不一致
【发布时间】:2017-12-25 13:16:57
【问题描述】:

我在使用 TypeScript 2.4.1、Node.js v8.1.3 和 VS Code 1.14.0 时遇到了一些问题。

由于某种原因,我的实验代码没有按顺序打印。尤其是 rest 和 foreach 部分。

这是我的测试页。

我错过了什么吗?

GggDataStructuresIntTests.ts

var dotdotdotFun = function () {
    let [first, ...rest] = [1, 2, 3, 4, 5];
    console.log("first", first); // outputs 1
    console.log("rest", rest); // outputs [ 2, 3, 4 ]
    rest.forEach((item) => {
        console.log("forEach", item);
    });
}
dotdotdotFun();

tsconfig.json

{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "outDir": "js/",
        "sourceMap": true,
        "lib": [ "es2015" ],        
        "watch": true
    },
    "exclude": [
        "node_modules",
        "typings/browser.d.ts",
        "typings/browser"
    ]
}

launch.json

{

    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Node.js",            
            "program": "${file}",
            "outFiles": [
                "${workspaceRoot}/js/**/*.js"
            ]
        }        
    ]
}

有一些输出;

输出 1:

输出 2:

输出 3:

【问题讨论】:

  • 这是完全有效的 javascript,所以我怀疑 typescript 与此有关。将您的 sn-p 弹出到我的浏览器控制台中的行为符合预期(首先,休息,然后是 foreaches)
  • @Rob 嗯,所以你认为可能是 TypeScript 编译器弄乱了顺序?
  • 如果它 typescript,那将是编译器中的一个非常大的错误。我几乎可以肯定这与打字稿无关。也许节点正在做一些可疑的事情(或者另一段代码正在另一个线程上调用该方法)
  • 我明白了,也许我应该在问题中包含节点 8.1.3 版本,因为我也在节点调试器下运行。
  • 好像console.log 函数是一个异步函数。取决于使用的浏览器和库。

标签: javascript node.js typescript visual-studio-code


【解决方案1】:

Yeshan Jay 发表评论后,我对console.log() 进行了更多研究,而不是Node.js v8.2.0 Documentation

有如下语句;

控制台

警告:全局控制台对象的方法不一致 同步的就像它们类似的浏览器 API,也不是 像所有其他 Node.js 流一样始终异步。见注释 在process I/O for 了解更多信息。

看来这根本不是 TypeScript 编译器的错。 (我还检查了编译的 JS,一切都很好)。由于我是通过 Node.js 引擎运行编译的 js,所以问题从那一刻开始。这就是为什么在浏览器级别无法重现问题的原因。

我没有检查上一个 Node 引擎,但在这个新版本 (>= 8) 上,似乎根本不应该假定 console.log() 是同步的。

【讨论】:

    猜你喜欢
    • 2017-04-24
    • 2018-12-21
    • 1970-01-01
    • 2019-10-19
    • 2013-10-13
    • 2020-09-13
    • 2017-09-04
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多