猿问

是否可以将 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)。


好吧,所以按照Soverevisionerformance的建议,我这样做了:


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是一个承诺,即使我给出一个字符串作为参数)


猛跑小猪
浏览 106回答 1
1回答

慕丝7291255

您需要的HTML是异步检索的,不幸的是,没有办法在参数列表中等待它完成。您必须在函数的第一行上等待它:async _drawElement(selector, html) {  if (html === undefined) {    html = await this._htmlFrom(selector);  }  console.log(html);}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答