如何通过promise.resolve在javascript中返回其他代码通常使用的类的新示例

ergxz8rk  于 2021-09-23  发布在  Java
关注(0)|答案(0)|浏览(256)

我试图在twing 5中使用这个javascript类,twing 5是twing模板语言的javascript实现:

  1. class DrupalAttribute extends Map {
  2. constructor(it) {
  3. super(it);
  4. }
  5. /**
  6. * @param {...String|Array} args
  7. * @returns {DrupalAttribute}
  8. */
  9. addClass(args) {
  10. let self = this;
  11. let values = [];
  12. for (let i = 0; i < arguments.length; i++) {
  13. values.push(arguments[i]);
  14. }
  15. values.forEach(function (value) {
  16. if (!Array.isArray(value)) {
  17. value = [value];
  18. }
  19. if (!self.has('class')) {
  20. self.setAttribute('class', []);
  21. }
  22. let classes = self.get('class');
  23. value.forEach(function (d) {
  24. if (classes.indexOf(d) < 0) {
  25. classes.push(d);
  26. }
  27. });
  28. });
  29. return this;
  30. }
  31. removeClass(value) {
  32. let classes = [];
  33. if (this.has('class')) {
  34. classes = this.get('class');
  35. }
  36. if (!Array.isArray(value)) {
  37. value = [value];
  38. }
  39. value.forEach(function (v) {
  40. let index = classes.indexOf(v);
  41. if (index > -1) {
  42. classes.splice(index, 1);
  43. }
  44. });
  45. return this;
  46. }
  47. hasClass(value) {
  48. let classes = [];
  49. if (this.has('class')) {
  50. classes = this.get('class');
  51. }
  52. return (classes.indexOf(value) > -1);
  53. }
  54. setAttribute(key, value) {
  55. this.set(key, value);
  56. return this;
  57. }
  58. removeAttribute(key) {
  59. this.delete(key);
  60. return this;
  61. }
  62. toString() {
  63. let result = '';
  64. let components = [];
  65. this.forEach(function (value, key) {
  66. if (Array.isArray(value)) {
  67. value = value.join(' ');
  68. }
  69. components.push([key, '"' + value + '"'].join('='));
  70. });
  71. let rendered = components.join(' ');
  72. if (rendered) {
  73. result += ' ' + rendered;
  74. }
  75. return result;
  76. }
  77. }
  78. module.exports = DrupalAttribute;

twing(和twig)允许我们定义自己的自定义函数,我尝试使用drupal属性类作为twi(n)g函数之一。
twing 5切换到异步方法,其中所有函数都需要返回已解析的promise对象,如下所示:

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

这对我不管用,那个 create_attribute 函数被找到,但函数没有输出属性,如果我在 constructor 方法无法访问它。
twig的早期版本(例如版本2)是同步的,在该版本中,以下twig功能工作正常,没有其他更改:

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

对我来说,唯一的区别似乎是使用 Promise.resolve(new drupalAttribute()) 而不是 return new drupalAttribute() . 我做错什么了吗?我不太了解类和承诺是如何交互的,我想知道解析而不是返回类是否会在类周围添加一个额外的层,从而阻止它的可用性?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题