JavaScript - ES6函数由于一些奇怪的原因不起作用

时间:2017-04-29 18:11:36

标签: javascript function ecmascript-6

我正在设置以下功能以便在之后检索它。 但是,出于某种原因,它不起作用:

constructor(private nativeStorage: NativeStorage) {
    // I am calling it this way:
    this.userId = 123;
    this.getItem("userId", this.userId);

   // If I replace the shortcut by the below it works fine

   /* this.nativeStorage.getItem("userId).then(
        data => this.userId = data,
        error => console.error(error)
    ); */
}

getItem(itemKey, itemValue) {
  return this.nativeStorage.getItem(itemKey).then(
    data => itemValue = data,
    error => console.error(error)
  );
}

我相信我在这里遗漏了一些东西,这就是为什么它不起作用

3 个答案:

答案 0 :(得分:3)

您将data分配给itemValue,这只是this.userId的副本。 JS不支持通过引用传递,这可能使这成为可能。相反,您可以使用itemKey直接分配给类实例,如下所示:

getItem(itemKey) {
    return this.nativeStorage.getItem(itemKey).then(
        data => this[itemKey] = data, // assign data to this[itemKey] which will be this.userId (in the example above)
        error => console.error(error)
    );
}

答案 1 :(得分:0)

JavaScript不支持按引用调用。它只是通过价值arg传递。因此,值只能通过对象引用进行更新。

答案 2 :(得分:0)

在参考部分/注释时,您不能拥有异步构造函数,因此我将所有异步部分提取到工厂中。

我还没有使用离子的经验,所以你应该把以下作为伪代码:

//a utility to fetch multiple items at once 
function getItems(...keys){
    return Promise.all( keys.map( key => NativeStorage.getItem(key) ) )
        .then(values => combine(keys, values));
}

//and a quick test
getItems("userId", "userName", ...).then(console.log);

//or in the context of the last snippet:
getItems("userId", "userName", ...).then(assignTo( new YourClass() ));

或在您要分配多个属性的情况下:

USE FOO

CREATE LOGIN FOO_Admin WITH PASSWORD = 'MY_PASSWORD'

CREATE USER ADMIN FOR LOGIN FOO_Admin

EXEC sp_addrolemember db_owner, ADMIN;
EXEC sp_addrolemember db_datareader, ADMIN
EXEC sp_addrolemember db_datawriter, ADMIN
GO

USE MASTER
GO
GRANT CONNECT SQL TO FOO_Admin

或者,如果这仍然是你的重复:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.3.Final</version>
    </dependency>


    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.2.3.Final</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>5.2.3.Final</version>
    </dependency>
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>6.1.0.jre8</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.3.2.Final</version>
    </dependency>

希望这有助于向您展示解决问题的不同方法。