我可以使用Promise作为函数参数的默认值吗?

时间:2020-05-20 16:39:19

标签: javascript promise

我想使用Promise的值作为这样的函数的默认参数:

_drawElement(selector, html = this._htmlFrom(selector)) {
  console.log(html);
}

_htmlFrom(templateName) {
  var templatePath = `${this._templates}/${templateName}.html`;
  return fetch(templatePath)
    .then((response) => response.ok ? response.text() : null)
}

但是我希望html是一个字符串,因为我可以用htmlFrom函数以外的其他方式传递它。在这里,我有个承诺,但我不知道如何检索字符串值(或null)。

好吧,因此,按照“某些性能”的建议,我这样做了:

async _drawElement(selector, html = this._htmlFrom(selector)) {
var tags = document.querySelectorAll(selector);
if (tags.length == 1) {
  console.log(html);
  var isPromise = typeof html.then == 'function';
  if (isPromise) {
    html = await html;
  }
...
}

但是idk为什么会调用_htmlFrom函数,即使我使用html值调用该函数也是如此。 (即使我将字符串作为参数,为什么html仍是一个承诺)

1 个答案:

答案 0 :(得分:0)

您需要的HTML是异步检索的,很遗憾,没有任何方法可以等待它在参数列表内完成 。您必须在函数的第一行上等待它:

async _drawElement(selector, html) {
  if (html === undefined) {
    html = await this._htmlFrom(selector);
  }
  console.log(html);
}