使用 lit-html 直到从 Promise 渲染数组

Rendering Array from a Promise using lit-html's until

我正在尝试使用 lit-html 及其 until 语法渲染一些 HTML。我必须承认,承诺让我感到沮丧,但我是一名后端开发人员,所以这归结为我缺乏知识。如有任何帮助,我们将不胜感激。

我的代码

... removed for brevity ...

    async getCenters() {
        try {
            return await this.centerManager.allCenters;
        }
        catch (error) {
            return error;
        }
    }

    createView() {
        return html`
        <style>
            h2 {
                color: var(--ptsi-gold);
                font-family: 'Helvetica Neue Medium';
                font-size:1.4em;
            }

            p {
                font-family: 'Helvetica Neue Roman';
                font-size:1em;
            }

            .wrapper {
                display: flex;
                flex-wrap: wrap;
                justify-content: space-between;
            }

            .tile {
                background: var(--ptsi-gray);
                padding: 25px;
                margin: 25px 0px 25px 0px;
            }
        </style>
        <div class="wrapper">
            <div class="tile">
                <h2>This is a Hard Typed Title</h2>
                <p>This is a Hard Typed Body.</p>
            </div>
        </div>
        ${until(this.getCenters().then((data) => {
            data.forEach(element => {
                html`<div class="wrapper">
                        <div class="tile">
                            <h2>${element.program_code}</h2>
                            <p>${element.program_name}</p>
                        </div>
                    </div>
                `
            })
        }), html`<span>Loading...</span>`)
            }`
    }
}

... removed for brevity ...

当页面加载时,我循环遍历数组并且可以检查值。此外,我在调试器中看到正在加载...,但 html`` 从不在 until() 函数中呈现内容。

until 的第一个参数没有解析任何内容。将函数更新为 return 值并使用 map 而不是 forEach.

until(this.getCenters().then((data) => {
  return data.map(element => {
    return html`<div class="wrapper">
      <div class="tile">
        <h2>${element.program_code}</h2>
        <p>${element.program_name}</p>
      </div>
    </div>`
  })
}), html`<span>Loading...</span>`)