JavaScript中如何通过Promise.resolve返回一个类的新实例可以被其他代码正常使用

如何解决JavaScript中如何通过Promise.resolve返回一个类的新实例可以被其他代码正常使用

我正在尝试在 this JavaScript class 中使用 Twing 5,它是 Twig 模板语言的 JavaScript 实现:

class DrupalAttribute extends Map {
  constructor(it) {
    super(it);
  }

  /**
   * @param {...String|Array} args
   * @returns {DrupalAttribute}
   */
  addClass(args) {
    let self = this;
    let values = [];

    for (let i = 0; i < arguments.length; i++) {
      values.push(arguments[i]);
    }

    values.forEach(function (value) {
      if (!Array.isArray(value)) {
        value = [value];
      }

      if (!self.has('class')) {
        self.setAttribute('class',[]);
      }

      let classes = self.get('class');

      value.forEach(function (d) {
        if (classes.indexOf(d) < 0) {
          classes.push(d);
        }
      });
    });

    return this;
  }

  removeClass(value) {
    let classes = [];

    if (this.has('class')) {
      classes = this.get('class');
    }

    if (!Array.isArray(value)) {
      value = [value];
    }

    value.forEach(function (v) {
      let index = classes.indexOf(v);

      if (index > -1) {
        classes.splice(index,1);
      }
    });

    return this;
  }

  hasClass(value) {
    let classes = [];

    if (this.has('class')) {
      classes = this.get('class');
    }

    return (classes.indexOf(value) > -1);
  }

  setAttribute(key,value) {
    this.set(key,value);

    return this;
  }

  removeAttribute(key) {
    this.delete(key);

    return this;
  }

  toString() {
    let result = '';
    let components = [];

    this.forEach(function (value,key) {
      if (Array.isArray(value)) {
        value = value.join(' ');
      }

      components.push([key,'"' + value + '"'].join('='));
    });

    let rendered = components.join(' ');

    if (rendered) {
      result += ' ' + rendered;
    }

    return result;
  }
}

module.exports = DrupalAttribute;

Twing(和 Twig)允许我们定义自己的自定义函数,我正在尝试使用 drupal-attribute class 作为这些 Twi(n)g 函数之一。

Twing 5 切换到异步方法,其中所有函数都需要返回已解析的 Promise 对象,如下所示:

const createAttribute = new TwingFunction('create_attribute',() =>
  return Promise.resolve(new drupalAttribute()),);

这对我不起作用,找到了 create_attribute 函数,但该函数没有输出任何属性,如果我在 constructor 方法中放置断点,则无法到达。

Twig 的早期版本(例如版本 2)是同步的,在那个版本中,下面的 Twing 函数完美运行,没有其他变化:

const createAttribute = new TwingFunction('create_attribute',function() {
  return new drupalAttribute();
});

对我来说,唯一的区别似乎是使用了 Promise.resolve(new drupalAttribute()) 而不是 return new drupalAttribute()。我在这里做错了吗?我不太了解类和 Promise 是如何交互的,我想知道解析而不是返回类是否会在类周围添加一个额外的层,使其无法使用?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?