我正在尝试实现一种在 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) 我正在尝试评估一个包含 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
除了明显的类型系统之外,我已经读过Type4中的功能在ES6中不可用.文章没有提到这些特征是什么或为什么应该避免它们.
我已经知道TypeScript实现了ES7 async/await语法,这篇文章(在Typescript中实现了哪些ES6特性)给出了反向关系.
在 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)
(同样,不要立即将整个文件加载到内存中。)
据我了解,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
绑定到我的代理函数,则会发生错误,因此他可以检测到我的函数实际上是代理。因此,我尝试代理Function
和Function.prototype
,Function.prototype.toString
但后来我意识到我无法代理Function
,因为即使我覆盖全局属性Function
,有人也可以使用 …
javascript google-chrome v8 google-chrome-extension ecmascript-2016
我对所有的 Javascript 生态系统都很困惑。我正在尝试利用 node 和 Chrome 的强大功能创建跨平台应用程序的 Electron。我创建了一个小应用程序,并使用了一些“现代”(这让 C# 程序员大笑)javascript 概念作为 lambdas,它开箱即用(我认为这是很自然的,因为我拥有最新版本的 node )。然后我尝试下一步,我在使用 Babel 的示例中看到了很多样板。
为什么我需要这个?
如果电子工作在最新的、预先知道的、节点和 chrome 是最新的环境中,并且如果我将它捆绑在一个应用程序中,为什么我不应该直接在 ESwhatever 中进行编码?
我们开发了一个需要IE11支持的软件.由于多个源声明,IE11不支持async/await:
以及一些博客文章.
我们现在写了一个简单的Angular 5项目,该项目使用async/await,它在IE11中工作正常.我们可以安全地假设Angular在IE11中使用某种polyfill来增加对它的支持吗?我找不到任何来源说Angular增加对它的支持.
VS Code 无法识别开箱即用的 ES7 绑定语法。相反,它显示为语法错误:
[ts] Declaration or statement expected.
Run Code Online (Sandbox Code Playgroud)
.eslintrc
,这似乎也不起作用。到目前为止,我什至无法确认 VS Code 识别我的.eslintrc
文件并将其用于自己的配置。有没有人知道如何配置 VS Code 来识别语法?我意识到这是一个Stage 0功能,但是我觉得在这一点上它相当普遍。我也意识到我看到的是 TypeScript 错误,但是禁用 TypeScript linting 并不能消除错误。我认为它只是显示为继承自 JavaScript 的 TypeScript 错误。
经过大量搜索,有很多关于如何使用它的文章,但关于VS Code几乎没有。
我试图找出使用 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 执行此操作的最短方法是什么。
我正在尝试获取一个网址来获取标头并确保它返回内容类型,以便我可以检查以确保它包含“图像”
到目前为止,我只是循环访问数据库以获取图像 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) ecmascript-2016 ×10
javascript ×8
ecmascript-6 ×4
node.js ×3
async-await ×2
babeljs ×2
angular ×1
csv ×1
electron ×1
eslint ×1
modernizr ×1
object ×1
polyfills ×1
tslint ×1
typescript ×1
v8 ×1