Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript承诺就绪_Javascript_Angular_Typescript_Promise_Angular Promise - Fatal编程技术网

Javascript承诺就绪

Javascript承诺就绪,javascript,angular,typescript,promise,angular-promise,Javascript,Angular,Typescript,Promise,Angular Promise,我有一个类(LoadClass),它在页面加载时初始化,在我的例子中打开一个SQLite数据库并执行几个查询。现在,我希望其他组件仅在LoadClass以前加载完数据库时执行代码,但这必须随时发生。出于显而易见的原因,我只想打开数据库一次。它应该是这样工作的: class LoadClass { // This executes directly on page load constructor() { this.load_my_database().then(

我有一个类(LoadClass),它在页面加载时初始化,在我的例子中打开一个SQLite数据库并执行几个查询。现在,我希望其他组件仅在LoadClass以前加载完数据库时执行代码,但这必须随时发生。出于显而易见的原因,我只想打开数据库一次。它应该是这样工作的:

class LoadClass {

    // This executes directly on page load
    constructor() {
        this.load_my_database().then(function() {
            // My database finished loading, now my buttons may work.
        })
    }
}

function user_presses_button() {
    LoadClass.ready().then(function() {
        // Only now something
    })
}

我将如何使用Promises来实现这一点?

这与angular有什么关系?@echonax在我的例子中,它是angular 2项目,所以你所要求的就是如何编写一个单例?我一直认为Angular services提供了开箱即用的功能。你真的需要。存储数据库加载承诺,并根据需要重新使用它。你可以随时调用
then()
,这与angular有什么关系?@echonax在我的例子中,这是angular 2项目,所以你需要的就是如何编写一个单例?我一直认为Angular services提供了开箱即用的功能。你真的需要。存储数据库加载承诺,并根据需要重新使用它。您可以根据相同的承诺随时调用
then()
class LoadClass {

    private _ready_promise; 

    constructor() {}

    // This executes directly on page load
    page_load() {
        this._ready_promise = this.load_my_database();
    }

    load_my_database() {
        return new Promise(function(resolve) {
            // Do something...
            // Now my database finished loading, everything else may work.
            return resolve();
        })
    }

    ready() {
        return this._ready_promise;
    }
}

function user_presses_button() {
    LoadClass.ready().then(function() {
        // Only now something
    })
}