标签: ecmascript-2016

如何使用 ES7 语法从 Node.js VM 脚本检索异步结果

我正在尝试实现一种在 Node.js VM 中运行“顺序编写”异步 JS 代码并获取对相应上下文对象的访问权限的方法。我尝试使用即将到来的 ES7await功能,由babel.js.

在我看来,script.runInContext()在后台运行,而主循环继续,因此我无法从虚拟机的上下文中获取结果。

我的示例代码如下:

var vm = require('vm');
var request = require('request-promise');
var babel = require("babel-core");

// VM context object
var contextCache = { 
    context: { 
        request: request 
    } 
};

// ES 7 code
var code = "var res = await request('http://www.google.de')";

// Wrap the code
code = "(async function() { " + code + " })()";

// Transpile code ES7 -> ES5
var regeneratedCode = babel.transform(code, { "ast": …
Run Code Online (Sandbox Code Playgroud)

node.js async-await babeljs ecmascript-2016

6
推荐指数
1
解决办法
5894
查看次数

Math.pow IE11 的替代“**”ES7 polyfill

我正在尝试评估一个包含 power 的表达式,字符串为**。即eval("(22**3)/12*6+3/2")。问题是 Internet Explorer 11 无法识别这一点并引发语法错误。我应该使用哪种聚酯填充材料来克服这个问题?现在我正在使用Modernizr 2.6.2.

示例方程是,

((1*2)*((3*(4*5)*(1+3)**(4*5))/((1+3)**(4*5)-1)-1)/6)/7
((1*2)*((3*(4*5)*(1+3)**(4*5))/((1+3)**(4*5)-1)-1)/6)/7*58+2*5
(4*5+4-5.5*5.21+14*36**2+69/0.258+2)/(12+65)
Run Code Online (Sandbox Code Playgroud)

如果无法做到这一点,有哪些可能的替代方案?

javascript modernizr polyfills internet-explorer-11 ecmascript-2016

6
推荐指数
1
解决办法
1627
查看次数

在ES6中没有实现哪些Typescript功能?

除了明显的类型系统之外,我已经读过Type4中的功能在ES6中不可用.文章没有提到这些特征是什么或为什么应该避免它们.

我已经知道TypeScript实现了ES7 async/await语法,这篇文章(在Typescript中实现了哪些ES6特性)给出了反向关系.

javascript typescript ecmascript-6 ecmascript-2016

5
推荐指数
0
解决办法
1093
查看次数

使用 Node.js 和 ES6/ES7 功能逐行读取 CSV 文件

在 Python 中逐行读取 CSV 文件(即无需将整个文件加载到内存中)很简单:

import csv
for row in csv.reader(open("file.csv")):
    print(row[0])
Run Code Online (Sandbox Code Playgroud)

对 node.js 进行同样的操作涉及使用诸如node-csv、流和回调之类的东西。

是否可以使用新的 ES6/ES7 功能(例如迭代器、生成器、promise 和异步函数)以看起来更像 Python 代码的方式迭代 CSV 文件的行?

理想情况下,我希望能够写出这样的东西:

for (const row of csvOpen('file.csv')) {
  console.log(row[0]);
}
Run Code Online (Sandbox Code Playgroud)

(同样,不要立即将整个文件加载到内存中。)

javascript csv node.js ecmascript-6 ecmascript-2016

5
推荐指数
1
解决办法
2402
查看次数

JavaScript - 使代理无法检测

据我了解,ES 规范说Proxy(用于代理对象、函数和类的全局构造函数)是不可检测的。这意味着如果我代理一个函数,使用该代理函数的任何人都无法检测到我使用了代理。然而,显然我误解了它,因为代理功能是可以检测到的。

例如,new Proxy(a=>a,{apply:a=>a})+''抛出错误。它说

Uncaught TypeError: Function.prototype.toString requires that 'this' be a Function
Run Code Online (Sandbox Code Playgroud)

然而,typeof new Proxy(a=>a,{apply:a=>a})确实是"function",但它以某种方式无法对代理进行字符串化。因此,显然,在这种情况下,代理函数的行为与非代理函数的行为不同。Function.prototype.toString能够区分代理函数和非代理函数。

我的目标是代理一个函数,使其变得不可检测。我的第一个想法是像这样真正代理代理:

Proxy.toString = (a => () => a)(Proxy + '');
Proxy = new Proxy(Proxy, {
  construct: (f, args) => {
    if(typeof args[0] == 'function'){
      var a = args[0] + '';
      args[0].toString = () => a;
    }
    return new f(...args);
  }
});
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,这是可以检测到的。如果有人调用Function.prototype.toString绑定到我的代理函数,则会发生错误,因此他可以检测到我的函数实际上是代理。因此,我尝试代理FunctionFunction.prototypeFunction.prototype.toString但后来我意识到我无法代理Function,因为即使我覆盖全局属性Function,有人也可以使用 …

javascript google-chrome v8 google-chrome-extension ecmascript-2016

5
推荐指数
1
解决办法
943
查看次数

为什么 Electron 项目需要 Babel

我对所有的 Javascript 生态系统都很困惑。我正在尝试利用 node 和 Chrome 的强大功能创建跨平台应用程序的 Electron。我创建了一个小应用程序,并使用了一些“现代”(这让 C# 程序员大笑)javascript 概念作为 lambdas,它开箱即用(我认为这是很自然的,因为我拥有最新版本的 node )。然后我尝试下一步,我在使用 Babel 的示例中看到了很多样板。

为什么我需要这个?

如果电子工作在最新的、预先知道的、节点和 chrome 是最新的环境中,并且如果我将它捆绑在一个应用程序中,为什么我不应该直接在 ESwhatever 中进行编码?

javascript ecmascript-6 babeljs electron ecmascript-2016

5
推荐指数
1
解决办法
3685
查看次数

Angular 5 polyfill async /等待IE11

我们开发了一个需要IE11支持的软件.由于多个源声明,IE11不支持async/await:

以及一些博客文章.

我们现在写了一个简单的Angular 5项目,该项目使用async/await,它在IE11中工作正常.我们可以安全地假设Angular在IE11中使用某种polyfill来增加对它的支持吗?我找不到任何来源说Angular增加对它的支持.

async-await ecmascript-2016 angular

5
推荐指数
1
解决办法
1360
查看次数

如何让 VS Code 识别 ES7 绑定操作符

VS Code 无法识别开箱即用的 ES7 绑定语法。相反,它显示为语法错误:

代码中突出显示的错误示例

[ts] Declaration or statement expected.
Run Code Online (Sandbox Code Playgroud)
  • 我四处搜索,看看是否有一个扩展可以帮助识别它,但无济于事。
  • 我还尝试将 VS Code 配置为使用我自己的.eslintrc,这似乎也不起作用。到目前为止,我什至无法确认 VS Code 识别我的.eslintrc文件并将其用于自己的配置。

有没有人知道如何配置 VS Code 来识别语法?我意识到这是一个Stage 0功能,但是我觉得在这一点上它相当普遍。我也意识到我看到的是 TypeScript 错误,但是禁用 TypeScript linting 并不能消除错误。我认为它只是显示为继承自 JavaScript 的 TypeScript 错误。

经过大量搜索,有很多关于如何使用它的文章,但关于VS Code几乎没有。

javascript eslint tslint visual-studio-code ecmascript-2016

5
推荐指数
1
解决办法
1023
查看次数

使用es6从两个对象中获取差异对象

我试图找出使用 es6 获取两个对象之间的交集对象的最佳方法是什么。我的意思是:

a = {a:'a',b:'b',c:'c', d:'d'};
b = {a:'a',b: '1', c:'c', d:'2', f'!!!'}
// result I want:
c = getDifference(a,b)
//c is now: {b:'1', d:'2'}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以使用 es6 来做到这一点,或者我是否需要使用 for(in) 和 Object.keys() 迭代 a 对象并进行比较,将交集分配给 c?

(a,b) => {
    const c = {};
    for(const _key in Object.keys(a)){
       if(b[_key] && b[_key] !== a[_key]){
           c[_key] = b[_key];
       }
    }
    return c;
}
Run Code Online (Sandbox Code Playgroud)

我知道 loadash/underscore 有这些类型的辅助函数...但是尝试看看 es6 是否有任何新的短语法,如果没有,使用 vanilla js 执行此操作的最短方法是什么。

javascript object ecmascript-6 ecmascript-2016

5
推荐指数
2
解决办法
9631
查看次数

使用 node-fetch 时套接字不断挂起

我正在尝试获取一个网址来获取标头并确保它返回内容类型,以便我可以检查以确保它包含“图像”

到目前为止,我只是循环访问数据库以获取图像 url,并将其传递到 fetch 中以获取内容类型。

到目前为止,然后出现套接字挂起错误。

这是我正在调用的函数

const getImage = async (url) => {
  try {
    const res = await fetch(encodeURI(url));
    console.log(res.headers.get("content-type"));
  } catch (err) {
    console.log(err);
  }
};
Run Code Online (Sandbox Code Playgroud)

然而,过了这么长时间,它开始出错,并且 node-fetch 产生以下错误:

FetchError: request to http://www.fakeurl/image.jpg failed, reason: socket hang up
at ClientRequest.<anonymous> (/home/user/code/url-check/node_modules/node-fetch/lib/index.js:1455:11)
    at ClientRequest.emit (events.js:321:20)
    at Socket.socketOnEnd (_http_client.js:463:9)
    at Socket.emit (events.js:333:22)
    at endReadableNT (_stream_readable.js:1201:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
Run Code Online (Sandbox Code Playgroud)

我不确定我做错了什么,我猜测服务器一次收到太多请求,但不知道如何减慢速度或将其排队以重试

编辑

这是调用上面函数的数据库循环:

connection.query(sql, (error, results, fields) => {
  if (error) {
    return console.error(error.message);
  }

  for (let i = 0; …
Run Code Online (Sandbox Code Playgroud)

javascript node.js ecmascript-2016

5
推荐指数
1
解决办法
4024
查看次数