gpt4 book ai didi

javascript - Promise + 数组中未定义 'this'。减少()

转载 作者:行者123 更新时间:2023-11-30 15:00:19 24 4
gpt4 key购买 nike

<分区>

从今天早上开始我就遇到了一个问题。

我有什么

基本上,我有一个简单的类,其中包含一组要注册的文件:

function MyClass() {

this.filesToRegister = [
{
"fileName": "http://tny.im/azk"
},
{
"fileName": "http://tny.im/azk"
}
];
}

我还有一个简单的函数,_contextFunction(),它接受一个 fileToRegister 条目:

MyClass.prototype._contextFunction = function(fileToRegister) {

return new Promise((resolve, reject) => {

logger.info(typeof this.filesToRegister);
logger.info('current file: ' + fileToRegister);
return resolve();
});
};

请注意,此函数必须访问上下文(this),这是强制性的,我无法更改它。

最后,我有一个实用方法 processArray(),它可以对数组的每个项目应用一个函数,所有这些都是同步完成的:

MyClass.prototype.processArray = function(array, fn) {

let results = [];
return array.reduce((p, item) => {

return p.then(() => {

return fn(item).then((data) => {

results.push(data);
return results;
}).catch(err => console.log(err));
});
}, Promise.resolve());
};

我想做什么

我使用此实用程序方法将 _contextFunction() 应用于 filesToRegister 数组的每一项:

this.processArray(this.filesToRegister, this._contextFunction);

它可以正常工作并在 this.filesToRegister 的每个项目上执行 this._contextFunction()

问题是什么

但是,当我尝试在 _contextFunction() 中记录 typeof this.filesToRegister 时,结果是 undefined... 经过多次测试,我得出结论,上下文中没有任何内容是可访问的(上下文属性和上下文方法都不是)。

但是,如果我在没有 processArray() 方法的情况下执行 this._contextFunction(),我可以访问上下文(上下文属性和上下文方法)。

我的想法

我的猜测是问题出在 processArray() 方法上,但我看不出在哪里...我尝试正确记录 typeof this.filesToRegisterprocessArray() 方法中,它起作用了……

总结:

  • processArray() 能够访问上下文。
  • this._contextFunction() 启动的“独立”能够访问上下文。
  • processArray() 启动的
  • this._contextFunction() 无法访问上下文。

谁能帮帮我?谢谢

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com