次のドキュメント構造があります。
{
"_id": "car_1234",
"_rev": "1-9464f5d70547c255a423ff8dae653db1",
"Tags": [
"Audi",
"A4",
"black"
],
"Car Brand": "Audi",
"Model": "A4",
"Color": "black",
"CarDealerID": "5"
}
Tags
フィールドには、ドキュメントの情報がリストで格納されます。この構造は、このままである必要があります。ここで、ユーザーは HTML テキスト入力フィールドで車を検索することができます。a,
は車間の区切りを表します。次の例を見てみましょう。
黒のアウディ、ピンクのアウディ A4
ここで、ユーザーは黒の Audi またはピンクの Audi A4 を見つけたいと考えています。データベースを介してクエリを実行する私のアプローチは、入力された単語を次の構造に分割し、サブ配列内のすべての単語 (「black」や「Audi」など) が存在する場合にデータベース内の各ドキュメント[["black", "Audi"],["pink", "Audi", "A4"]]
のフィールド内を検索し、を返します。Tags
CarDealerID
///Before this I return the word list as described
}).then(function (wordList) {
results = [];
for (var i = 0; i < userWords.length; i++) {
//Check if the object is a single word or an array of words
if (wordList[i].constructor === Array) {
//Recreate the words in the array as one string
wordString = ""
wordList[i].forEach(function (part) {
wordString += part + " "
})
wordString = wordString.trim()
//Search for the car
car_db.search({
query: wordString,
fields: ["Tags"],
include_docs: true
}).then(function(result) {
result.rows.forEach(function (row) {
results.push(row.doc.CarDealerID)
})
})
} else {
car_db.search({
query: userWords[i],
fields: ["Tags"],
include_docs: true
}).then(function(result) {
result.rows.forEach(function (row) {
results.push(row.doc.CarDealerID)
})
})
}
return results
}).then(function(results) {
console.log(results)
}).catch(function (err) {
console.log(err)
});
私の問題
for
私の問題は、ループが終了する前に結果が返されることです。これはおそらく、これが非同期プロシージャであり、この非同期が完了するまで結果が返されるのを待つ必要があるためです。しかし、それを達成する方法がわかりません。誰かが私を助けてくれることを願っています。