小编Ben*_*Ben的帖子

这可以重构为使用通用功能原则吗?

比较器函数ascending接受两个参数 - ab.它必须返回一个比较两者的整数.

我有一个列表,我想按名称排序,所以我写了以下函数.

是否有一种功能习惯用法可以用来组合这两个功能,而不是byName负责编写结果函数?

const ascending = (a, b) => a.localeCompare(b);
const byName = (i) => i.get('name');
const useTogether = (...fns) => ...; // is there an idiomatic function like this?

// usage
items.sort(useTogether(byName(ascending))); 
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming

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

为什么这个异步生成器会导致 JavaScript 运行时挂起?

以下 JavaScript 导致运行时在 OSX 10.15.2 上的 Chrome (v80.0.3987.116) 和 Firefox (v72.0.2) 上挂起。

为什么?

请注意,我将迭代器函数标记为async.

const iterable = {
    async *[Symbol.iterator]() {
        yield 'one'
    }
}

console.log([...iterable])
Run Code Online (Sandbox Code Playgroud)

javascript

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

以这种方式等待多个承诺是一种反模式吗?

以下发出一个unhandledrejection事件,但似乎“工作”。

for...await 似乎通过发出异常来响应被拒绝的承诺(尽管在第一个承诺已经解决之后)。

我可以unhandledrejection使用Promise.alland避免该事件Promise.allSettled。以下代码是反模式吗?

async function asyncFunction() {
    try {
        const happy = new Promise((resolve)=>setTimeout(()=>resolve('success'), 1000))
        const sad = new Promise((_,reject)=>setTimeout(()=>reject('failure')))
        const promises = [happy, sad]
        for await(const item of promises) {
            console.log(item)
        }
    } catch (err) {
        console.log(`an error occurred:`, err)
    }
}

asyncFunction()
Run Code Online (Sandbox Code Playgroud)

javascript

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

为什么 map、foreach 和 reduce 不使用 Symbol.iterator 上的迭代器函数?

为什么map, foreach, andreduce不使用迭代器函数 on Symbol.iterator

class MyArray extends Array {
    *[Symbol.iterator]() {
        for(let x = 0; x < this.length; x++) { yield this[x]*2 }
    }
}

const log = console.log
const arr = new MyArray(1,2,3)
console.log([...arr]) // [2,4,6]
log(arr.map((i) => i)) // [1,2,3]
Run Code Online (Sandbox Code Playgroud)

和:

const arr = [1,2,3]
Object.defineProperty(Object.getPrototypeOf(arr), Symbol.iterator, { 
    value: function*() {
        for(let x = 0; x < this.length; x++) { yield this[x]*2 }
    }
})

const log = console.log
log([...arr]) // …
Run Code Online (Sandbox Code Playgroud)

javascript

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

JavaScript Promise 如何在幕后工作

当承诺产生和消耗时,我对幕后发生的事情感到非常困惑。请澄清我的观点,并对我的英语不好表示歉意。

  1. 使用 new 关键字创建空白对象 Promise 构造函数被调用,并且 new 关键字设置 Promise 构造函数的 this 指向空白对象 this = Blankobject。
  2. Promise 构造函数接收参数中的回调(执行器函数)并调用执行器函数。
  3. 执行器函数接收两个回调(resolve、reject)作为参数
  4. setTimeout 在执行器函数中被调用,setTimeOut 是异步代码
  5. 异步代码进入后台,然后 Promise 构造函数返回以前为空白对象的 Promise 对象,并将 Promise 对象引用保存到 myPromise。
  6. 创建了一个变量

接下来发生什么 ?当then方法被调用时,方法的代码then会转到后台吗?我想它会进入后台,变量是 console.log // 10

主代码执行完成后,异步代码启动setTimeout回调开始执行,执行完成后,promise 得到满足,resolved 函数返回值。这个值如何存储在 Promise 对象中以及then方法中发生了什么?

let myPromise = new Promise (
    (resolve, reject) => {

        setTimeout(() => {
            console.log(getIDs)
            resolve(10);

        }, 1500);

    }
)


let a = 10
        myPromise.then(val => {
            console.log(val);

        })
        console.log(a)
Run Code Online (Sandbox Code Playgroud)

javascript promise es6-promise

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

为什么在函数中重新声明标识符会屏蔽同名参数?

TLDR:为什么函数参数不被视为var声明?

Using var,重新声明使用声明的变量var无效。原声明仍然有效。

但是,var以这种方式使用将屏蔽同名参数。

为什么语言是这样设计的?

在下文中, variablevar bar被视为新声明而不是 parameter 的重新声明bar

function foo(bar = 0, bam = () => bar) {
  var bar = 1
  return bam()
}
console.log(foo()) // 0
Run Code Online (Sandbox Code Playgroud)

是不是因为参数和局部变量在语义上根本不同,分为两类?

我可能希望参数被视为var声明,但事实并非如此。它们似乎在作用域链上自己的“盒子”中。

所以函数的作用域链是这样的:

function body >> parameter list >> outer function body >> outer parameter list >> ... global scope
Run Code Online (Sandbox Code Playgroud)

javascript

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

使用 extends 对内置 Promise 进行子类化

我想向内置cancel的子类添加一个方法。Promise为什么这不起作用?

class CancellablePromise extends Promise {
    constructor(executor) {
        let cancel = null
        super((resolve,reject) => {
            cancel = reject
            executor(resolve, reject)
        })
        this.cancel = cancel
    }
}

const p = new CancellablePromise((resolve) => setTimeout(resolve, 1000))
    .then(() => console.log('success'))
    .catch((err) => console.log('rejected', err))

p.cancel() // Uncaught exception
Run Code Online (Sandbox Code Playgroud)

答案是 todo 吗Symbol.species

javascript promise cancellation ecmascript-6 es6-class

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

私有静态和实例变量是否在C#中继承?为什么?

我已经读过,基类中的私有变量在技术上是由子类继承的,但是不可访问.

如果这是正确的,为什么我们说它们是继承的,大概是它们只能通过反射来访问?

c# inheritance

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

.NET从运行代码生成序列图

是否有可以通过运行.NET代码生成序列图的工具?

.net sequence-diagram auto-generate

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

C#中受限制的通用委托

我想有一个约束返回两种类型之一的委托; 一个ActionResult或一个字符串.这可能吗?

c# generics delegates

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