javascript - 如何通过 Promise.resolve 在 JavaScript 中返回一个可以被其他代码正常使用的类的新实例
问题描述
我正在尝试在Twing 5中使用这个 JavaScript 类,它是 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 类作为这些 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()
. 我在这里做错了吗?我不太了解类和承诺如何交互,我想知道解决而不是返回类是否会在类周围添加一个额外的层来阻止它的使用?
解决方案
推荐阅读
- c++ - 使用 OpenSSL 内存 BIO 进行第二次 ClientHello 后验证方法未触发
- oracle - 如何循环遍历 PLSQL 中的游标?
- xamarin - 如何在 xamarin UWP 中使用字体
- c - 如何将 uint8_t 从 uart_read_bytes 转换为 char 或可以添加到 cJSON 对象的东西?
- atom-editor - 如何在原子编辑器上将未保存文件的初始单词显示为标题而不是“无标题”
- automation - 如何通过 PuTTY 连接远程服务器并执行本地和远程文件
- r - 与 R shinyApp 的本地服务器端口连接
- html - 如何正确对齐元素?
- node.js - 在 mysql 中不是有效的 BCrypt 哈希
- autodesk-forge - Forge Viewer - 无法在 DWF/DWFX 模型的设置中显示边