gpt4 book ai didi

javascript - 返回一个使用嵌套 Promise 构建的对象

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:15 24 4
gpt4 key购买 nike

我正在努力理解嵌套的 promise 布局,其中一个对象在其末尾返回。我当前的代码如下:

路由器

router.get(`/${config.version}/event/:id?`, function (req, res, next) {
var event = new Event(req, res, next);
event.getInfo(req.params.id).then((info) => {
res.send(info);
});
});

功能

getInfo(id) {
db.main('events').where('id', id).select()
.then((result) => {
if(result.length > 0) {
var event = result[0];

//regular functions
event.status = this.getStatus(id);
event.content = this.getContent(id);
event.price = this.getPrice(id);

//promise functions
var users = this.getUsers(id);
var hosts = this.getHosts(id);

Promise.all([users, hosts]).then(values => {
event.users = values[0];
event.hosts = values[1];

//return whole event object to router
return event;
})
.catch((err) => {
return {
result: 'error',
error: err
};
});

} else {
return {
result: 'error',
error: "Event does not exist"
};
}
}).catch((e) => {
return {
result: 'error',
error: "Could not retrieve event info"
};
});
}

如您所见,路由器发起调用以获取有关事件的信息。然后该函数执行数据库调用并获取一些事件数据。此后,我需要从不同的表中获取事件的用户和主机,将该信息也附加到事件对象,然后将整个对象返回到路由器以发送到客户端。

当我这样做时,我收到一个错误,因为我没有从 getInfo 函数返回 promise ,但我不确定应该如何返回或返回哪个 promise 。

我希望得到一些帮助。谢谢

最佳答案

使用 .then 意味着您正在返回一个 promise 。

function getInfo(id) {
return new Promise(function(resolve, reject) {
resolve('yay!');
})
}
getInfo().then(function(result) { //result = yay! });

要使您的代码正常工作,只需将所有返回替换为解析,将错误替换为拒绝,然后像我一样用 return new Promise 包装整个内容。

getInfo(id) {
return new Promise(function(resolve, reject) {
db.main('events').where('id', id).select()
.then((result) => {
if (result.length > 0) {
var event = result[0];

//regular functions
event.status = this.getStatus(id);
event.content = this.getContent(id);
event.price = this.getPrice(id);

//promise functions
var users = this.getUsers(id);
var hosts = this.getHosts(id);

Promise.all([users, hosts]).then(values => {
event.users = values[0];
event.hosts = values[1];

//return whole event object to router
resolve(event);
})
.catch((err) => {
reject({
result: 'error',
error: err
});
});

} else {
reject({
result: 'error',
error: "Event does not exist"
});
}
}).catch((e) => {
reject({
result: 'error',
error: "Could not retrieve event info"
});
});
});
}

关于javascript - 返回一个使用嵌套 Promise 构建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38838432/

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