我已经编写了一段时间的Javascript,但仍然不太确定我是不是太懒了.我有很多:
if( typeof( something) === 'undefined' ){
// ..
}
Run Code Online (Sandbox Code Playgroud)
但是,有时候它变得过于冗长.例如,现在我在做:
var redirectURLs = hotplate.get('hotCoreAuth/redirectURLs/success') || {};
Run Code Online (Sandbox Code Playgroud)
这是因为在以下几行中我将redirectURL视为一个对象,尽管它可能根本没有定义(该函数可能会返回undefined
).
是否有"最佳实践"备忘单?我上面写的是不是太懒了?只是替代方案很麻烦:
var redirectURLs = hotplate.get('hotCoreAuth/redirectURLs/success');
if( typeof( redirectURLs ) === 'undefined' ){
redirectURLs = {}
}
Run Code Online (Sandbox Code Playgroud)
我意识到快捷方式不那么健壮,但是再一次,人们要么设置了这个值,要么不设置.
想法?
芝加哥商业交易所.
我想写一个带有函数的通用包装器,并返回该函数的"异步样式"版本,如果它不是异步开始的话.
麻烦的是,没有简单的方法来知道呼叫是同步还是异步.所以...这基本上"无法完成".对?
(请注意,包装器应将同步函数协调为异步样式,并单独使用LEAVE异步函数)
var wrapper = function( fn ){
return function(){
var args = Array.prototype.splice.call(arguments, 0);
var cb = args[ args.length - 1 ];
// ?!?!?!?!?
// I cannot actually tell if `fn` is sync
// or async, and cannot determine it!
console.log( fn.toString() );
}
}
var f1Async = wrapper( function( arg, next ){
next( null, 'async' + arg );
})
var f2Sync = wrapper( function( arg ){
return 'sync' + arg;
})
f1Async( "some", function(err, ret …
Run Code Online (Sandbox Code Playgroud) 我写了一个包含许多异步函数的库.如果其中一个参数是明确错误,则SYNCHRONOUS辅助函数会抛出错误:
proto.makeParameters= function( filters ){
default:
throw( new Error("Field type unknown: " + fieldObject.type ) );
break;
}
Run Code Online (Sandbox Code Playgroud)
在我的异步函数中,当我使用它时,我有:
proto.someAsyncFunction = function( cb ){
// Run the query
try {
var parameters = this.makeParameters( filters );
} catch( e ){
return cb( e );
}
}
Run Code Online (Sandbox Code Playgroud)
所以:
异步功能永远不应该抛出是一种好习惯吗?(就像我一样)
现在,我正在捕捉所有错误.我应该更挑剔吗?也许组成一个错误类型,只是检查一下?如果是这样,在任何一种情况下我该怎么做?
我使用的是护照,并希望使用Google Contacts API 3.0版将Google通讯录与我的应用程序同步(这会突然变得有用10倍).
有人这样做过吗?如果是这样,你有一些示例代码吗?是否可以使用护照身份验证使其全部正常工作?
我需要逐行读取文件,并相应地更改变量.我通常会用PHP编写这个...但我决定接受挑战.
我写:
fs = require('fs');
Lazy = require('lazy');
path = require('path');
files = fs.readdirSync('.');
var software = {};
files.forEach( function(fileName){
var m;
if( m = fileName.match(/^(.*)\.txt$/) ){
name = m[1];
console.log("Processing file: " + fileName);
software[name] = {};
console.log("Software 1: %j",software);
var section = 'unset';
new Lazy(fs.createReadStream(fileName)).lines.forEach(
function(line){
var m;
line = line + '';
if( m = line.match(/^([a-zA-Z_]*):$/)){
section = m[1];
software[name][section] = '';
console.log("Switching to section " + m[1]);
console.log("Software 2: %j",software);
} else if (line == '.'){ …
Run Code Online (Sandbox Code Playgroud) 我有一个字符串,可以是逗号分隔的 列表\w
,例如:
我试图找到一个将返回['abc123']
(第一种情况)或['abc123', 'def456', 'ghi789']
(不带逗号)的 JavaScript 正则表达式。
我试过:
^(\w+,?)+$
-- 不,因为只会匹配最后一个重复模式,789^(?:(\w+),?)+$
- 相同的故事。我正在使用非捕获支架。但是,对于重复的单词,捕获似乎并没有发生我想用正则表达式做的事情甚至可能吗?我尝试了几乎所有分组的组合,使用捕获和非捕获括号,但仍然没有设法让这种情况发生......
HTMLImports.whenReady
和之间有什么区别window.addEventListener('WebComponentsReady', function(e) {
?
“要在您的主HTML文档中定义元素,请从HTMLImports.whenReady(callback)定义该元素。当文档中的所有导入均已完成加载时,将调用回调。”
在本机导入下,主文档中的标签会阻止加载导入。这是为了确保导入已加载,并且其中的所有注册元素都已升级。这种本机行为很难进行polyfill,因此“ HTML导入” polyfill不会尝试。而是WebComponentsReady事件是此行为的代表:
两者有什么区别?
javascript web-component polymer custom-element html-imports
我在 node 的 promisify() 函数中发现了一个奇怪的行为,我无法弄清楚它为什么这样做。
考虑以下脚本:
#!/usr/bin/env node
/**
* Module dependencies.
*/
var http = require('http')
var promisify = require('util').promisify
;(async () => {
try {
// UNCOMMENT THIS, AND NODE WILL QUIT
// var f = function () { return 'Straight value' }
// var fP = promisify(f)
// await fP()
/**
* Create HTTP server.
*/
var server = http.createServer()
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(3000)
server.on('error', (e) => { console.log('Error:', …
Run Code Online (Sandbox Code Playgroud) 我试图select
通过使用 Shadow dom 将内容插入其中来创建一个“增强”元素。这是文件(完整代码位于Glitch中:
import { LitElement, html } from 'lit-element'
export class Select extends LitElement {
render () {
return html`
<select id="_native">
<slot></slot>
</select>
`
}
}
customElements.define('nn-select', Select)
Run Code Online (Sandbox Code Playgroud)
然而,似乎没有什么被插入。重命名select
为select2
“解决”问题。
是否有限制使我们无法<slot>
使用原生元素?
在 lit-html 中,我们有一种firstUpdated()
方法可以在渲染元素后运行一次性初始化。
如果您只需要在该模板中的所有子项更新后才运行某个函数,该怎么办?如果您的模板包含本机表单元素和自定义表单元素怎么办?
现在我正在做一件可怕的事情:
firstUpdated () {
super.firstUpdated()
setTimeout(() => this.onceChildrenAreUpdated(), 100)
}
Run Code Online (Sandbox Code Playgroud)
当然有更好的方法吗?我意识到这很棘手,因为对于 lit-element 来说“渲染”意味着 DOM 已经完成;这并不意味着里面的所有元素都已经完成了接下来想要做的初始化。
但仍然...
javascript ×5
node.js ×5
asynchronous ×2
polymer ×2
async-await ×1
es6-promise ×1
google-api ×1
html ×1
html-imports ×1
iasyncresult ×1
lit-element ×1
lit-html ×1
oauth-2.0 ×1
passport.js ×1
promise ×1
regex ×1
shadow-dom ×1
split ×1
sync ×1
variables ×1