有兩件事情怎麼回事,可能會造成混亂。首先,arangojs(不像ArangoDB的內部JS API)是異步,用於需要與實際的ArangoDB服務器交談的所有內容。文檔中的異步函數被標記爲「異步」。
您可以將node.js樣式的回調(如內置node.js模塊中的異步函數,例如fs
,http
等)傳遞給這些方法。或者,您可以簡單地省略回調,該方法將返回結果的承諾。您可以詳細瞭解承諾如何工作in Mozilla's JavaScript reference documentation(這不是特定於Mozilla--它們的引用非常好,通常是正確的)。
您遇到的另一件事是arangojs中的集合對象與ArangoDB中的實際集合之間的區別。驅動程序允許您爲集合創建集合對象,而不管它們是否存在。當試圖使用它們,如果集合實際上不存在,你當然會看到一個錯誤。
var col = db.collection('whatever');
col.create() // create the collection if it doesn't exist
.catch(function() {}) // ignore any errors
.then(function() {
return col.get(); // make sure the collection exists now
})
.then(function() {
return col.save({some: 'data'});
})
.then(function (result) {
// everything went fine
})
.catch(function (e) {
console.error('Something went wrong', e.stack);
});
或者使用異步/等待(如果你用巴貝爾或者從現在看這個答案一年):
var col = db.collection('whatever');
try {
await col.create(); // create the collection if it doesn't exist
} catch (e) {} // ignore any errors
try {
await col.get(); // make sure the collection exists now
const result = await col.save({some: 'data'});
// everything went fine
} catch (e) {
console.error('Something went wrong', e.stack);
}
或者如何使用Node.js風格的回調,因爲你是老校友或很喜歡金字塔:
var col = db.collection('whatever');
col.create(function() { // create the collection if it doesn't exist
// ignore any errors
col.get(function (err) { // make sure the collection exists now
if (err) {
console.error('Something went wrong', err.stack);
return;
}
col.save({some: 'data'}, function (err, result) {
if (err) {
console.error('Something went wrong', err.stack);
return;
}
// everything went fine
});
});
});
儘管arangoDB的文檔說它可以工作,但節點的軟件包'arangojs'不同意它。對於不存在的集合,我的代碼保存在if子句中時顯示爲「true」。 我想要一個arangojs解決方案。目前,我只是在所有收藏列表中檢查收藏名稱以檢查收藏的存在。但是我的方法很粗糙,我自己也不喜歡 – Prasanna