将数组映射函数中类的`this`对象与异步、wait-Nodejs、Javascript一起使用
我需要使用在map函数中调用这个对象。我已经遵循了相关的答案。但所有人都表现出同样的例外 这是我的课将数组映射函数中类的`this`对象与异步、wait-Nodejs、Javascript一起使用,javascript,arrays,node.js,Javascript,Arrays,Node.js,我需要使用在map函数中调用这个对象。我已经遵循了相关的答案。但所有人都表现出同样的例外 这是我的课 const userServiceClient = require("./clients/user-service-client.js"); class GetProfilesByQueryHandler { constructor(userRepo) { this.userRepo = userRepo; } /** * Returns
const userServiceClient = require("./clients/user-service-client.js");
class GetProfilesByQueryHandler {
constructor(userRepo) {
this.userRepo = userRepo;
}
/**
* Returns profiles
* @param {any} req
*/
async handleHttp(req) {
const users = await userServiceClient.getUserByQuery(query, req.reqId);
users.map((user) => {
user.profile = await this.userRepo.findByReferenceId(user.id);
});
console.log(users);
}
}
module.exports = GetProfilesByQueryHandler;
我尝试了以下方法,并抛出了相关的异常
users.map((user) => {
user.profile = await this.userRepo.findByReferenceId(user.id);
});
----------------- Result ------------------------------
user.profile = await this.userRepo.findByReferenceId(user.id);',
' ^^^^',
'SyntaxError: Unexpected token this',
######################################################
users.map(function(user) {
user.profile = await this.userRepo.findByReferenceId(user.id);
}.bind(this));
----------------- Result ------------------------------
user.profile = await this.userRepo.findByReferenceId(user.id);',
' ^^^^',
'SyntaxError: Unexpected token this'
######################################################
users.map(this._getProfile, {repo: this.userRepo});
_getProfile(user) {
return user.profile = await this.repo.findByReferenceId(user.id);
}
----------------- Result ------------------------------
' return user.profile = await this.repo.findByReferenceId(user.id);',
' ^^^^',
'',
'SyntaxError: Unexpected token this',
######################################################
var self = this;
users.map((user) => {
user.profile = await self.userRepo.findByReferenceId(user.id);
});
----------------- Result ------------------------------
' user.profile = await self.userRepo.findByReferenceId(user.id);',
' ^^^^',
'',
'SyntaxError: Unexpected identifier',
######################################################
var that = this;
users.map((user) => {
user.profile = await that.userRepo.findByReferenceId(user.id);
});
----------------- Result ------------------------------
' user.profile = await that.userRepo.findByReferenceId(user.id);',
' ^^^^',
'',
'SyntaxError: Unexpected identifier
######################################################
var obj = {repo: this.userRepo};
users.map((user) => {
user.profile = await this.repo.findByReferenceId(user.id);
}, obj);
----------------- Result ------------------------------
' user.profile = await this.repo.findByReferenceId(user.id);',
' ^^^^',
'',
'SyntaxError: Unexpected token this',
######################################################
这样做的方法是什么。很多问题都与此相关。但所有的答案对我来说都不管用 未测试,但应能正常工作。 尝试显式设置上下文
users.map(this._getProfile.call({repo: this.userRepo}));
_getProfile(user) {
var self = this;
return function (user) { user.profile = await self.repo.findByReferenceId(user.id); }
}
未经测试,但应能正常工作。 尝试显式设置上下文
users.map(this._getProfile.call({repo: this.userRepo}));
_getProfile(user) {
var self = this;
return function (user) { user.profile = await self.repo.findByReferenceId(user.id); }
}
编辑:如果您想记录并返回异步调用的真实结果,我添加了第二个代码段。希望有帮助 您只是错过了arrow函数中的async关键字:
constuserserviceclient=require(“./clients/user-service-client.js”);
类GetProfilesByQueryHandler{
构造函数(userRepo){
this.userRepo=userRepo;
}
/**
*返回配置文件
*@param{any}req
*/
异步handleHttp(req){
const users=await userServiceClient.getUserByQuery(query,req.reqId);
//我在这里添加了一个“异步”。
users.map(异步(用户)=>{
user.profile=wait this.userRepo.findByReferenceId(user.id);
});
//如果没有这个异步,您的arrow函数就不是异步的
//你不能在里面使用wait。
//顺便说一句,此console.log不会记录映射后的用户。
console.log(用户);
}
}
module.exports=GetProfilesByQueryHandler代码>编辑:如果您想记录并返回异步调用的真实结果,我添加了第二个代码段。希望有帮助
您只是错过了arrow函数中的async关键字:
constuserserviceclient=require(“./clients/user-service-client.js”);
类GetProfilesByQueryHandler{
构造函数(userRepo){
this.userRepo=userRepo;
}
/**
*返回配置文件
*@param{any}req
*/
异步handleHttp(req){
const users=await userServiceClient.getUserByQuery(query,req.reqId);
//我在这里添加了一个“异步”。
users.map(异步(用户)=>{
user.profile=wait this.userRepo.findByReferenceId(user.id);
});
//如果没有这个异步,您的arrow函数就不是异步的
//你不能在里面使用wait。
//顺便说一句,此console.log不会记录映射后的用户。
console.log(用户);
}
}
module.exports=GetProfilesByQueryHandler代码>这也不适合我。同样的错误也在抛出<代码>语法错误:意外标识符
这对我也不起作用。同样的错误也在抛出<代码>语法错误:意外标识符
谢谢,在您第一次回答后,我正在寻找解决方案。突然你更新了我真正需要的答案。如果有帮助,我会很高兴的!谢谢,在你第一次回答之后,我正在寻找解决方案。突然你更新了我真正需要的答案。如果有帮助,我会很高兴的!