我正在为标记实现一个自定义渲染函数,它将检查图像的一些条件,执行异步请求,然后从不同的源返回图像。然而,由于新请求是异步的,我只会得到一个承诺,而不是一个“真实的”图像 url。
attachmentService.getBlobUrl
是一个异步函数,它执行一个 http 请求并返回一个承诺。
我的渲染函数如下所示:
marked.use({
renderer: {
image: (src, title, text) => {
if (someCondition) {
// Some code of parsing the src attribute
// ...
return this.attachmentService.getBlobUrl(attachment)
.then(url => {
return Promise.resolve(`<img src="${url}" alt="${text}" title="${title}"/>`)
})
}
return `<img src="${src}" alt="${text}" title="${title}"/>`
},
}
})
我已经尝试直接返回图像标签:
// ...
return this.attachmentService.getBlobUrl(attachment)
.then(url => {
return `<img src="${url}" alt="${text}" title="${title}"/>`
})
// ...
我还尝试将函数包装在async
调用中并返回(未包装在 a 中Promise.resolve
):
// ...
return (async () => {
return await this.attachmentService.getBlobUrl(attachment)
.then(url => {
return `<img src="${url}" alt="${text}" title="${title}"/>`
})
})()
// ...
然而,这也只是给了我一个承诺。
我不能使用await
,因为渲染函数本身必须是同步的——这不是我可以控制的。