Typescript returns 未在对象上定义
Typescript returns undefined on object
我有以下代码。我从 Express Pouchdb 中提取并反对,然后通过 _attachments
键循环提取所有附件。我有两个附件:"index" 和 "toc"。有趣的部分是 "index" returns 它是 "data" 属性 很好,但是这个一直失败,我不知道为什么。这就是我将 "toc" 设置为我的文章对象的方式。
Object.keys(new_article['attachments']).map((at) => {
this.articleStore.getAttachment(new_article['id'],at).then ((res) => {
new_article.attachments[at]['data'] = res.toString();
});
});
if (new_article['attachments'].hasOwnProperty('toc')) {
console.log(new_article['attachments']['toc']) //Line #27 in screenshot
console.log(new_article['attachments']['toc'].data) //Line #28 in screenshot
new_article.toc = new_article['attachments']['toc']['data'];
}
控制台截图如下:
来自 PouchDB 的相同对象:
{
"_id": "8c0f586b-020b-4832-bcde-945421c22a2e",
"description": "Getting the Gist of Markdown's Formatting Syntax",
"author": "John Gruber",
"title": "Getting the Gist of Markdown's Formatting Syntax",
"date": "4/15/2017",
"_attachments": {
"index.md": {
"digest": "md5-PjR3R2K+KdpgLy/ye5wgAA==",
"content_type": "application/octet-stream",
"length": 8373,
"revpos": 5,
"stub": true
},
"toc": {
"digest": "md5-heDcEdGg7nzo0OKe/30YxQ==",
"content_type": "application/octet-stream",
"length": 130,
"revpos": 6,
"stub": true
}
},
"_rev": "8-167fdf2e930304927c5e2fc4e371b123"
}
整个项目在这里=> https://github.com/flamusdiu/micro-blog/tree/dev
编辑 1
当我从 pouchdb 中拉出对象时,_attachments
被重新映射为 attachments
。更新了代码以显示其上方的行。
编辑 2
从异步调用返回值工作正常。这部分没有任何问题。似乎将其链接到我的第二个电话是修复它的原因。请参阅下面的答案。
DB查询为异步调用,循环中的赋值在最后的if之前不执行。试试这个:
Promise.all(Object.keys(new_article['attachments']).map((at) => {
return this.articleStore.getAttachment(new_article['id'],at).then ((res) => {
new_article.attachments[at]['data'] = res.toString();
});
})).then(() => {
if (new_article['attachments'].hasOwnProperty('toc')) {
console.log(new_article['attachments']['toc']) //Line #27 in screenshot
console.log(new_article['attachments']['toc'].data) //Line #28 in screenshot
new_article.toc = new_article['attachments']['toc']['data'];
}
});
我有以下代码。我从 Express Pouchdb 中提取并反对,然后通过 _attachments
键循环提取所有附件。我有两个附件:"index" 和 "toc"。有趣的部分是 "index" returns 它是 "data" 属性 很好,但是这个一直失败,我不知道为什么。这就是我将 "toc" 设置为我的文章对象的方式。
Object.keys(new_article['attachments']).map((at) => {
this.articleStore.getAttachment(new_article['id'],at).then ((res) => {
new_article.attachments[at]['data'] = res.toString();
});
});
if (new_article['attachments'].hasOwnProperty('toc')) {
console.log(new_article['attachments']['toc']) //Line #27 in screenshot
console.log(new_article['attachments']['toc'].data) //Line #28 in screenshot
new_article.toc = new_article['attachments']['toc']['data'];
}
控制台截图如下:
来自 PouchDB 的相同对象:
{
"_id": "8c0f586b-020b-4832-bcde-945421c22a2e",
"description": "Getting the Gist of Markdown's Formatting Syntax",
"author": "John Gruber",
"title": "Getting the Gist of Markdown's Formatting Syntax",
"date": "4/15/2017",
"_attachments": {
"index.md": {
"digest": "md5-PjR3R2K+KdpgLy/ye5wgAA==",
"content_type": "application/octet-stream",
"length": 8373,
"revpos": 5,
"stub": true
},
"toc": {
"digest": "md5-heDcEdGg7nzo0OKe/30YxQ==",
"content_type": "application/octet-stream",
"length": 130,
"revpos": 6,
"stub": true
}
},
"_rev": "8-167fdf2e930304927c5e2fc4e371b123"
}
整个项目在这里=> https://github.com/flamusdiu/micro-blog/tree/dev
编辑 1
当我从 pouchdb 中拉出对象时,_attachments
被重新映射为 attachments
。更新了代码以显示其上方的行。
编辑 2 从异步调用返回值工作正常。这部分没有任何问题。似乎将其链接到我的第二个电话是修复它的原因。请参阅下面的答案。
DB查询为异步调用,循环中的赋值在最后的if之前不执行。试试这个:
Promise.all(Object.keys(new_article['attachments']).map((at) => {
return this.articleStore.getAttachment(new_article['id'],at).then ((res) => {
new_article.attachments[at]['data'] = res.toString();
});
})).then(() => {
if (new_article['attachments'].hasOwnProperty('toc')) {
console.log(new_article['attachments']['toc']) //Line #27 in screenshot
console.log(new_article['attachments']['toc'].data) //Line #28 in screenshot
new_article.toc = new_article['attachments']['toc']['data'];
}
});