我有以下代码:
updateDocument = (data) => {
Cloudant(CONN_STRING, (err, cloudant) => {
if (err) {
throw new Error('Failed to initialize Cloudant: ' + err.message);
}
let db = cloudant.db.use('my-db')
db.insert(data, (err, result) => {
if (err) {
throw new Error('Failed to initialize Cloudant: ' + err.message);
}
else {
console.log(result);
}
})
});
}
我希望updateDocument()
返回db.insert提供的结果。但是,如果我尝试返回一个变量,那么它是未定义的(我相信是因为异步调用)。我已经尝试async
和await
,但我可能没有正确设置它们,因为它们也没有用。
感谢您的帮助!
答案 0 :(得分:4)
这是一个" JavaScript是异步的"问题。您可以像这样简化updateDocument
函数:
updateDocument = (data) => {
var cloudant = Cloudant({ url: CONN_STRING, plugin: 'promises');
let db = cloudant.db.use('my-db')
return db.insert(data);
}
这是使用Cloudant库和" promises"插入。 JavaScript Promises可以帮助您管理异步调用,而无需传递回调函数。
您可以这样调用此代码:
updateDocument({a: 1, :b})
.then((data) => {
console.log('success!', data);
}.catch((e) => {
console.log('oops!', e);
});
成功到达'然后'失败到达' catch'子句。