我们有一个数据库表,其中有一个名为image1
的列-这包含一个图像的base 64字符串。然后我们将该字符串上传到第三方服务,该服务创建一个图像并传回一个URL。然后我们使用URL更新image1
。
这似乎在70%的情况下都能正常工作,但到目前为止,我还无法解释列不更新的次数。这是我写的函数:
updatePhotoURL(dbid, photoUrl) {
console.group("### updatePhotoURL() called, dbid, photoUrl:", dbid, photoUrl);
let sqlQuery = 'UPDATE table SET image1=? WHERE dbid=?'
return new Observable<object>((obs) => {
this.openDatabase()
.flatMap((db) => {
return Observable.fromPromise(db.executeSql(sqlQuery, [photoUrl, dbid]))
})
.catch((error) => {
console.info("### error")
console.table(error)
let extra = `dbid: ${dbid == undefined ? 'undefined' : dbid}, `
if (photoUrl == undefined) {
extra += `photoUrl: undefined`
} else {
extra += `photoUrl: ${photoUrl.length > 0 ? photoUrl.substr(0, 20) + "..." : ""}`
}
obs.error({ r: "updatePhotoURL() catch()", s: error.code, m: error.message, e: extra })
obs.complete()
return error;
})
.map((dbUpdate) => {
if (dbUpdate.rowsAffected == 0) {
let extra = `dbid: ${dbid == undefined ? 'undefined' : dbid},`
if (photoUrl == undefined) {
extra += `photoUrl: undefined`
} else {
extra += `photoUrl: ${photoUrl.length > 0 ? photoUrl.substr(0, 20) + "..." : ""}`
}
obs.error({ r: "updatePhotoURL() function", s: 0, m: 'Could not update photo URL for this snag in storage', e: extra })
} else {
obs.next(dbUpdate)
}
obs.complete()
return dbUpdate
})
.subscribe((success) => {
console.groupEnd()
});
});
}
正如我之前所说,这在很多时候都有效,但偶尔我们会看到数据库没有更新,我不明白为什么。我已经在SQL语句执行中添加了catch()
,所以如果有任何错误,我们就会抓住它。但是我似乎从来没有从中得到任何东西。之后,我得到了一个map()
函数,它检查rowsAffected
的值是否等于0 -所以如果出于某种原因,我们我们在执行SQL语句时没有看到错误,那么我们会触发一个错误,因为数据库行没有受到影响。
我可以确认该行的dbid
确实存在,并且photoUrl
的值肯定是一个字符串URL。还有什么我可以检查或应该注意的吗?
谢谢bengrah
1条答案
按热度按时间eaf3rand1#
如果没有有关错误消息或任何特定日志的详细信息,很难确定列未更新的确切原因。但是,以下几种可能的情况可能有助于您解决此问题:
第三方服务错误:如果创建图像并返回URL的第三方服务遇到问题或已关闭,则该列可能无法更新。在这种情况下,您可以尝试记录第三方服务的响应,以检查是否有任何错误或URL是否正确返回。
数据库连接问题:数据库连接可能失败,这可能导致列不更新。您可以尝试记录与数据库连接相关的任何错误,以检查是否存在这种情况。
base64字符串无效或不完整:如果image1列中的base 64字符串无效或不完整,则第三方服务可能无法创建图像并返回URL。在这种情况下,您可以尝试记录base 64字符串以检查它是否有效和完整。
不正确的SQL查询:如果SQL查询不正确,可能会导致列不更新。您可以尝试记录SQL查询,以检查它是否正确并与表结构匹配。
我建议在函数中添加更多的日志记录和错误处理,以帮助确定问题的根本原因。此外,您可以尝试使用不同的base 64字符串和URL测试函数,以查看问题是一致的还是间歇性的。