Tag: JavaScript

什么是承诺处理器模式?

我已经读了几个地方的承诺处理器模式,但我不知道它是什么。 有人build议我在代码中使用它,如下所示: function getDb(){ return myDbDriver.getConnection(); } var users = getDb().then(function(conn){ return conn.query("SELECT name FROM users").finally(function(users){ conn.release(); }); }); 什么是承诺处理器模式,它在这里如何适用? 注意 – 在本地的承诺中,我.finally “添加拒绝和履行处理程序,返回价值,但执行一个行动”。 在这种情况下,我正在使用蓝鸟。

Promise.all与RxJS Observables的行为?

在Angular 1.x中,我有时需要做出多个http请求,并对所有的响应进行处理。 我将所有的承诺放在一个数组中,并调用Promise.all(promises).then(function (results) {…}) 。 Angular 2的最佳实践似乎指向使用RxJS的Observable来代替http请求中的承诺。 如果我有两个或更多不同的Observable从http请求创build,他们相当于Promise.all() ?

Webpack装载机与插件; 有什么不同?

webpack中的加载器和插件有什么区别? 插件的文档只是说: 使用插件添加通常与webpack中捆绑相关的function。 我知道babel使用jsx / es2015转换器的加载器,但是看起来像其他常见任务(例如copy-webpack-plugin)使用插件。

如何使用Google图表API在X轴上使用date?

有没有方法使用Google图表API绘制图表,以便X轴值是一个月内的天数? 我有没有提供相同频率的数据点。 例如: Date – Value 1/1/2009 – 100 1/5/2009 – 150 1/6/2009 – 165 1/13/2009 – 200 1/20/2009 – 350 1/30/2009 – 500 我想制作一个图表,将每个数据点与基于一个月的时间的相对距离分开。 这可以用Excel来完成,但我怎样才能计算和显示它与谷歌图表? 其他类似于Google图表的免费解决scheme或者可以与ASP.NET一起使用的免费库也是受欢迎的。

“yyyy-mm-ddT00:00:00.000Z”的“.000Z”是什么意思?

我从以下date和时间格式的应用程序得到了回复: YYYY-MM-ddT00:00:00.000Z 我需要date和时间来提交我必须提交的报告。 .000Z是什么意思? 我需要做什么来获得根据使用JavaScript的地区的时间?

ThreeJS:从场景中移除物体

我正在使用ThreeJS开发一个Web应用程序,显示实体列表,每个实体都有相应的“查看”和“隐藏”button。 例如entityName 查看隐藏 。 当用户点击查看button时,下面的函数被调用,实体在屏幕上绘制成功。 function loadOBJFile(objFile){ /* material of OBJ model */ var OBJMaterial = new THREE.MeshPhongMaterial({color: 0x8888ff}); var loader = new THREE.OBJLoader(); loader.load(objFile, function (object){ object.traverse (function (child){ if (child instanceof THREE.Mesh) { child.material = OBJMaterial; } }); object.position.y = 0.1; scene.add(object); }); } function addEntity(object) { loadOBJFile(object.name); } 并点击隐藏button,下面的函数被调用: function removeEntity(object){ scene.remove(object.name); […]

ES6模板文字比string连接更快吗?

有没有人做基准? 我很好奇,如果HTML生成代码更快与string连接或与节点和现代浏览器中的模板文字。 例如: string连接 "<body>"+ "<article>"+ "<time datetime='" + date.toISOString() +"'>"+ date +"</time>"+ "</article>"+ "</body>" 模板文字 `<body> <article> <time datetime='${ date.toISOString() }'>${ date }</time> </article> </body>`

如何优化React + Redux中嵌套组件的小道具更新?

示例代码: https : //github.com/d6u/example-redux-update-nested-props/blob/master/one-connect/index.js 观看现场演示: http : //d6u.github.io/example-redux-update-nested-props/one-connect.html 如何优化嵌套组件的道具的小更新? 我有上面的组件,回购和RepoList。 我想更新第一个回购的标签( 第14行 )。 所以我派出了一个UPDATE_TAG动作。 在我实现了shouldComponentUpdate之前,调度需要大约200ms,这是预料之中的,因为我们正在浪费大量时间差异<Repo/> s没有改变。 添加shouldComponentUpdate ,调度需要大约30ms。 在生产生成React.js之后,更新仅花费约17ms。 这是好得多,但在Chrome开发控制台的时间表视图仍然表明无框架(超过16.6毫秒)。 想象一下,如果我们有这样的更新,或者<Repo/>比现在更复杂,我们将无法保持60fps。 我的问题是,对于嵌套组件的道具的这种小的更新,是否有更高效和规范的方式来更新内容? 我还可以使用Redux吗? 我得到了一个解决scheme,用一个可观察的内部减速器replace每个tags 。 就像是 // inside reducer when handling UPDATE_TAG action // repos[0].tags of state is already replaced with a Rx.BehaviorSubject get('repos[0].tags', state).onNext([{ id: 213, text: 'Node.js' }]); 然后我使用https://github.com/jayphelps/react-observable-subscribe在Repo组件里订阅它们的值。 这很好。 即使有React.js的开发版本,每个调度也只需要5ms。 但是我觉得这是Redux中的反模式。 更新1 […]

如何提供ECMAScript 5(ES 5)-shim?

ECMAScript第五版(2009年12月发布)引入了一些新的方法(详见本表 )。 但是,那里还有一些旧的浏览器没有实现这些新的方法。 幸运的是,存在一个方便的脚本(用JavaScript编写) – ES5-shim – 它在不存在的环境中手动实现这些方法。 但是,我不知道如何提供ES5的垫片…我应该只是“给”它的所有浏览器,如下所示: <script src="es5-shim.js"></scipt> 还是应该包含一个支票,以便仅仅“打扰”那些真正需要它的浏览器,如下所示: <script> if ( !Function.prototype.hasOwnProperty( 'bind' ) ) { (function () { var shim = document.createElement( 'script' ); shim.src = 'es5-shim.js'; var script = document.getElementsByTagName( 'script' )[0]; script.parentNode.insertBefore( shim, script ); }()); } </script> (我正在使用Function.prototype.bind来检查浏览器是否实现了所有新的ECMAScript 5方法,根据上面链接的兼容性表,当实现ECMAScript 5方法时, bind是“最后的堡垒”。 当然,为了使这个垫片有效,它必须在所有其他脚本之前执行,这意味着我们希望在页面的早期(在HEAD中,在所有其他SCRIPT元素之前)包含上述SCRIPT元素。 那么,这个第二个例子是一个向浏览器提供ECMAScript 5-shim的好方法吗? 有没有更好的方法来做到这一点?

JQuery的重点在input字段

该页面上的HTML有20个<input>字段,每个字段的名字和顺序从1到20递增。 如果variablesid被设置为下一个顺序的id ( id + 1),这个函数将导致焦点适用于该字段。 但是,如果在当前input字段外部单击,则input的数字大于10时,最后一个input字段将不会重新获得焦点,但会显示警报。 $(":input").focusout(function(){ var input = $(this).val(); var id = $(this).attr('id'); if(input > 10){ alert('You must enter a number between 0 and 10 '+id); $("#"+id).select(); } }); 如何设置最后一个input字段来重新获得焦点?