小编Ada*_*dam的帖子

javascript数组上的getter/setter?

有没有办法在数组上获取get/set行为?我想象这样的事情:

var arr = ['one', 'two', 'three'];
var _arr = new Array();

for (var i = 0; i < arr.length; i++) {
    arr[i].__defineGetter__('value',
        function (index) {
            //Do something
            return _arr[index];
        });
    arr[i].__defineSetter__('value',
        function (index, val) {
            //Do something
            _arr[index] = val;
        });
}
Run Code Online (Sandbox Code Playgroud)

javascript arrays getter setter

30
推荐指数
3
解决办法
3万
查看次数

Typescript:无法访问继承的类构造函数中的成员值

我有一个类A,还有一个B继承自它的类.

class A {
    constructor(){
        this.init();
    }
    init(){}
}

class B extends A {
    private myMember = {value:1};
    constructor(){
        super();
    }
    init(){
        console.log(this.myMember.value);
    }
}

const x = new B();
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我收到以下错误:

Uncaught TypeError: Cannot read property 'value' of undefined
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免这个错误?

对我来说很明显,JavaScript代码会init在创建之前调用该方法myMember,但应该有一些实践/模式来使其工作.

javascript oop inheritance typescript ecmascript-6

19
推荐指数
2
解决办法
1654
查看次数

窗口上的代理

我想设置一个Proxy警告我在window对象上定义新属性时.(实际上我想捕获所有的全局变量声明)

let handler = {
    defineProperty(target, key, descriptor) {
        console.log('hey', key);
        return false;
    }
};
window = new Proxy(window, handler);
window.foo = 'bar';
// nothing happens
Run Code Online (Sandbox Code Playgroud)

上面的代码适用于任何对象,但窗口:

let handler = {
    defineProperty(target, key, descriptor) {
        console.log('hey', key);
        return false;
    }
};
let target = {};
target = new Proxy(target, handler);
target.foo = 'bar';
// console: "hey  bar"
Run Code Online (Sandbox Code Playgroud)

有没有办法Proxywindow对象上设置,如果不可能,是否有任何棘手的解决方案来实现相同的目标?

javascript ecmascript-6

11
推荐指数
1
解决办法
2638
查看次数

MySQL查询 - 比较版本号

我的一个SQL表中有一个字段存储版本号,如'3.4.23''1.224.43'.

有没有办法为这个字段使用大于条件?

SELECT * FROM versions WHERE version_number > '2.1.27'

mysql sql versioning

9
推荐指数
2
解决办法
3480
查看次数

处理Node.js中的回滚MySQL事务

我正在处理一个问题几天,我真的很希望,你可以帮助我.

它是一个用于的node.js基础API .sequelizeMySQL

在某些API调用中,代码启动SQL锁定某些表的事务,如果我同时向API发送多个请求,则会LOCK_WAIT_TIMEOUT出现错误.

var SQLProcess = function () {
    var self = this;
    var _arguments = arguments;

    return sequelize.transaction(function (transaction) {
            return doSomething({transaction: transactioin});
        })
        .catch(function (error) {
            if (error && error.original && error.original.code === 'ER_LOCK_WAIT_TIMEOUT') {

                return Promise.delay(Math.random() * 1000)
                    .then(function () {
                        return SQLProcess.apply(self, _arguments);
                    });

            } else {
                throw error;
            }
        });
};
Run Code Online (Sandbox Code Playgroud)

我的问题是,同时运行的请求相互锁定了很长时间,我的请求在很长一段时间后(~60秒)返回.

我希望我能解释清楚易懂,你可以给我一些解决方案.

javascript mysql node.js express sequelize.js

9
推荐指数
1
解决办法
998
查看次数

TypeScript:自动生成的动态函数名称

我在TypeScript中有一些动态生成的函数名.我现在可以使用它们的唯一方法是将对象投射到<any>.例如:<any>myInstance.getDataA().这些函数是根据某些规则动态生成的.基于相同的规则,我想为我的classes 生成类型定义,但我无法使其工作.

original.ts

abstract class Original {

    dynamics = ['getData', 'setData'];

    constructor() {
        // I create functions here dynamically
        this.dynamics.forEach((key) => {
            this[key + this.info] = () => null;
        });
    }

    get info() {
        return 'X';
    }
}
Run Code Online (Sandbox Code Playgroud)

我-class.ts

class MyClass extends Original {
    get info() {
        return 'A';
    }
}
Run Code Online (Sandbox Code Playgroud)

我 - 其他 - class.ts

class MyOtherClass extends Original {
    get info() {
        return 'B';
    }
}
Run Code Online (Sandbox Code Playgroud)

something.ts

const myInstance = new MyClass(); …
Run Code Online (Sandbox Code Playgroud)

javascript types typescript

9
推荐指数
1
解决办法
1023
查看次数

JavaScript / Mocha-如何测试是否已等待函数调用

我想编写一个测试,检查我的函数是否使用await关键字调用了其他函数。

我希望考试失败

async methodA() {
   this.methodB();
   return true; 
},
Run Code Online (Sandbox Code Playgroud)

我希望我的测试能够成功

async methodA() {
   await this.methodB();
   return true;
},
Run Code Online (Sandbox Code Playgroud)

我也希望我的测试也能成功

methodA() {
   return this.methodB()
       .then(() => true);
},
Run Code Online (Sandbox Code Playgroud)

我有一个解决方案,方法是使用stub方法并强制其使用来返回其内部的伪诺言process.nextTick,但这似乎很丑陋,我不想在测试中使用process.nextTicknor setTimeout等。

ugly-async-test.js

const { stub } = require('sinon');
const { expect } = require('chai');

const testObject = {
    async methodA() {
        await this.methodB();
    },
    async methodB() {
        // some async code
    },
};

describe('methodA', () => {
    let asyncCheckMethodB; …
Run Code Online (Sandbox Code Playgroud)

javascript testing mocha.js node.js sinon

7
推荐指数
1
解决办法
413
查看次数

如何在MySQL中存储最近的使用频率

我正在研究应用程序的Product Catalog模块Invoicing.

当用户创建新发票时,该product name字段应为自动填充字段,该字段显示产品目录中最近使用的产品.

如何在数据库中存储此"使用新近度/频率"?

我正在考虑添加一个新的字段recency,1每次使用该产品时都会增加,而1/(count of all products)当使用其他产品时,该字段会减少.然后使用此recency字段进行排序,但在我看来这不是最好的解决方案.

你能帮我解决一下这类问题的最佳做法吗?

mysql sql database

6
推荐指数
1
解决办法
623
查看次数

如何获取JavaScript代理的目标?

function createProxy() {
    const myArray = [Math.random(), Math.random()];
    return new Proxy(myArray, {});
}

const myProxy = createProxy();
Run Code Online (Sandbox Code Playgroud)

如何访问这里的target(是myArraymyProxy

我尝试了很多方法。在Google上搜索了许多博客文章,但没有找到目标的方法:(

javascript proxy ecmascript-6

5
推荐指数
6
解决办法
3515
查看次数

Sequelize / Typescript:参数“值”和“值”的类型不兼容

我正在尝试创建一个BaseModel从中继承我所有模型的模型。我也在尝试创建一个单独的method()函数,可以将我的任何模型作为参数。

这是我的示例代码:

import {
    Model, Optional
} from 'sequelize'; // v6.3.5


interface DefaultAttributes {
    id: number;
}
interface TestAttributes extends DefaultAttributes {
    field: number;
}

class BaseModel<T extends DefaultAttributes> extends Model<T, Optional<T, 'id'>> {
    static test() {
    }
}

class MyModel extends BaseModel<TestAttributes> {
}

function method<T extends typeof BaseModel>(model: T) {
    model.test();
}

method(MyModel) // <<<<<< TypeScript ERROR

Run Code Online (Sandbox Code Playgroud)

我已经尝试按照文档描述的那样做所有事情。https://sequelize.org/master/manual/typescript.html

我收到以下打字稿错误:

TS2345:“typeof MyModel”类型的参数不可分配给“typeof BaseModel”类型的参数。参数“值”和“值”的类型不兼容。类型 'Optional<T, "id">' 不能分配给类型 'Optional<TestAttributes, "id">'。'Optional<T, "id">' 类型中缺少属性 'field',但在类型 'Pick<TestAttributes, "field">' 中是必需的。 …

javascript sequelize.js typescript

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