小编Mer*_*erc的帖子

如何确保变量是一个对象

我已经编写了一段时间的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)

我意识到快捷方式不那么健壮,但是再一次,人们要么设置了这个值,要么不设置.

想法?

芝加哥商业交易所.

javascript variables design-patterns

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

通用包装器将函数协调为异步样式

我想写一个带有函数的通用包装器,并返回该函数的"异步样式"版本,如果它不是异步开始的话.

麻烦的是,没有简单的方法来知道呼叫是同步还是异步.所以...这基本上"无法完成".对?

(请注意,包装器应将同步函数协调为异步样式,并单独使用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)

asynchronous node.js

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

async函数永远不会抛出?

我写了一个包含许多异步函数的库.如果其中一个参数是明确错误,则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)

所以:

  • 异步功能永远不应该抛出是一种好习惯吗?(就像我一样)

  • 现在,我正在捕捉所有错误.我应该更挑剔吗?也许组成一个错误类型,只是检查一下?如果是这样,在任何一种情况下我该怎么做?

error-handling asynchronous node.js

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

使用Google Contacts API 3.0版和NodeJS'Passport同步联系人

我使用的是护照,并希望使用Google Contacts API 3.0版将Google通讯录与我的应用程序同步(这会突然变得有用10倍).

有人这样做过吗?如果是这样,你有一些示例代码吗?是否可以使用护照身份验证使其全部正常工作?

sync google-api node.js oauth-2.0 passport.js

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

Node and Lazy:我怎么知道它何时完成?

我需要逐行读取文件,并相应地更改变量.我通常会用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)

javascript iasyncresult node.js

4
推荐指数
1
解决办法
3025
查看次数

正则表达式捕获逗号分隔值

我有一个字符串,可以是逗号分隔的 列表\w,例如:

  • abc123
  • abc123,def456,ghi789

我试图找到一个将返回['abc123'](第一种情况)或['abc123', 'def456', 'ghi789'](不带逗号)的 JavaScript 正则表达式。

我试过:

  • ^(\w+,?)+$ -- 不,因为只会匹配最后一个重复模式,789
  • ^(?:(\w+),?)+$ - 相同的故事。我正在使用非捕获支架。但是,对于重复的单词,捕获似乎并没有发生

我想用正则表达式做的事情甚至可能吗?我尝试了几乎所有分组的组合,使用捕获和非捕获括号,但仍然没有设法让这种情况发生......

javascript regex split

4
推荐指数
2
解决办法
9929
查看次数

HTMLImports.whenReady和window.addEventListener('WebComponentsReady',function(e){`之间有什么区别

HTMLImports.whenReady 和之间有什么区别window.addEventListener('WebComponentsReady', function(e) {

Polymer的官方文档说:

“要在您的主HTML文档中定义元素,请从HTMLImports.whenReady(callback)定义该元素。当文档中的所有导入均已完成加载时,将调用回调。”

Webcomponents.org关于进口的官方文件说:

在本机导入下,主文档中的标签会阻止加载导入。这是为了确保导入已加载,并且其中的所有注册元素都已升级。这种本机行为很难进行polyfill,因此“ HTML导入” polyfill不会尝试。而是WebComponentsReady事件是此行为的代表:

两者有什么区别?

javascript web-component polymer custom-element html-imports

4
推荐指数
1
解决办法
2057
查看次数

在非回调函数上调用 promisify():“有趣”的结果是节点。为什么?

我在 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)

node.js promise async-await es6-promise

4
推荐指数
1
解决办法
539
查看次数

在原生 <select> 元素中使用 <slot>

我试图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)

然而,似乎没有什么被插入。重命名selectselect2“解决”问题。

是否有限制使我们无法<slot>使用原生元素?

html javascript shadow-dom

4
推荐指数
1
解决办法
1806
查看次数

一旦所有子元素都_实际_更新,就运行一个函数

在 lit-html 中,我们有一种firstUpdated()方法可以在渲染元素后运行一次性初始化。

如果您只需要在该模板中的所有子项更新后才运行某个函数,该怎么办?如果您的模板包含本机表单元素和自定义表单元素怎么办?

现在我正在做一件可怕的事情:

  firstUpdated () {
    super.firstUpdated()

    setTimeout(() => this.onceChildrenAreUpdated(), 100)
  }
Run Code Online (Sandbox Code Playgroud)

当然有更好的方法吗?我意识到这很棘手,因为对于 lit-element 来说“渲染”意味着 DOM 已经完成;这并不意味着里面的所有元素都已经完成了接下来想要做的初始化。

但仍然...

polymer lit-element lit-html

4
推荐指数
1
解决办法
1921
查看次数