【问题标题】:How to return a value within a promise in angular 2如何在角度2的承诺中返回一个值
【发布时间】:2018-08-16 05:21:21
【问题描述】:

我想检查 sessionStorage (sessionStorage['new']) 的值,如果它存在,我想返回它并忽略函数的其余部分,但我得到一个未定义的错误。我不确定我做错了什么。

public getDispositionTree(memberType: string,
                          market: string,
                          includeFiltered: boolean = false,
                          forcedUUIDS: string[] = [],
                          includeArchived: boolean = false): 
    Promise<DispositionTreeNode[]> {

    let treeLoadedPromise;

    if (this.savedDispositionTrees.has(market)) {
        treeLoadedPromise = Promise.resolve();
    } else {
        // **THIS LINE BELOW IS MY CHANGE**
        treeLoadedPromise = sessionStorage['new']
        // treeLoadedPromise = this.loadDispositionTree(market);
    }
    return treeLoadedPromise.then(() => {
        if (includeFiltered) {
            if (includeArchived) {
                return this.savedDispositionTrees.get(market);
            } else {
                return this.getExcludeArchivedDispositionTree(this.savedDispositionTrees.get(market));
            }

        }
        return this.getRelevantDispositionTree(market, memberType, forcedUUIDS);
    });
}

这是错误:

 core.es5.js?0445:1085 ERROR Error: Uncaught (in promise): TypeError: 
 treeLoadedPromise.then is not a function
 TypeError: treeLoadedPromise.then is not a function

【问题讨论】:

    标签: angular promise angular2-services angular-promise session-storage


    【解决方案1】:

    该错误并未说明 then 未定义。

    您将treeLoadedPromise 设置为从sessionStorage["new"] 返回的任何内容。这个值不会是一个承诺。如果项目存在,这将返回一个字符串,否则它将是undefined

    我猜你想要这样的东西:

    let treeLoadedPromise;
    
    if (this.savedDispositionTrees.has(market)) {
        treeLoadedPromise = Promise.resolve();
    } else {
    
        let sessionStorageValue = sessionStorage['new'];
        if (sessionStorageValue !== undefined)
        {
            treeLoadedPromise = Promise.resolve(sessionStorageValue);
        }
        else
        {
            treeLoadedPromise = this.loadDispositionTree(market);
        }
    }
    

    【讨论】:

    • 我明白你的意思。我是否将其余代码保留在下面?
    • Promise.resolve(value) 将返回一个解析为 value 的 Promise。因为它现在是一个承诺而不是一个字符串,所以你可以在上面调用then()。我必须通读几次文档才能理解 Promise。特别是,尝试this page.
    • 啊,所以 promise 需要“thenable”?我们可以通过将会话 ob 包装在 Promise.resolve(sessionObj) 中来做到这一点。
    • 是的,您遇到的最初问题是您根本没有返回 Promise,只是一个字符串。使用sessionStorage 将从对象中删除任何元数据。当您尝试将其从本地存储中取出时,它没有任何关于成为承诺的信息。
    • 知道了。谢谢!
    猜你喜欢
    • 2016-12-31
    • 1970-01-01
    • 2015-10-27
    • 2017-02-08
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    相关资源
    最近更新 更多