#node.js #for-loop #redis #promise #bluebird
#node.js #цикл for #redis #обещание #bluebird
Вопрос:
я хочу функцию, которая создает новый объект JSON, который выглядит так :
{ T-ID_12 : [{ text: "aaaaa", kat:"a" }], T-ID_15 : [{ text: "b", kat:"ab" }], T-ID_16 : [{ text: "b", kat:"ab" }] }
Это { text: "aaaaa", kat:"a" }
в thesenjsondata, и это T-ID_12
является записью массива Thesen_IDS. И мое решение на данный момент таково :
function makeThesenJSON(number_these, Thesen_IDS){
var thesenjsondata;
var thesenids_with_jsondata = "";
for (i = 0; i < number_these; i ){
db.getAsync(Thesen_IDS[i]).then(function(res) {
if(res){
thesenjsondata = JSON.parse(res);
thesenids_with_jsondata = (Thesen_IDS[i] ' : [ ' thesenjsondata " ], ");
}
});
}
var Response = "{ " thesenids_with_jsondata " }" ;
return Response;
}
Я знаю, что цикл for быстрее, чем db.GetAsync(). Как я могу правильно использовать обещания bluebird с redis, чтобы возвращаемое значение содержало все нужные мне данные?
Ответ №1:
Вы просто создаете массив обещаний из вызовов Redis, затем используете вызовы Bluebird Promise.all
, чтобы дождаться, пока все они вернутся в виде массива.
function makeThesenJSON(number_these, Thesen_IDS) {
return Promise.all(number_these.map(function (n) {
return db.GetAsync(Thesen_IDS[n]);
}))
.then(function(arrayOfResults) {
var thesenids_with_jsondata = "";
for (i = 0; i < arrayOfResults.length; i ) {
var res = arrayOfResults[i];
var thesenjsondata = JSON.parse(res);
thesenids_with_jsondata = (Thesen_IDS[i] ' : [ ' thesenjsondata " ], ");
}
return "{ " thesenids_with_jsondata " }";
})
}
Обратите внимание, что эта функция является асинхронной, потому что она возвращает обещание, которое в конечном итоге преобразуется в строку. Значит, вы называете это так:
makeThesenJSON.then(function (json) {
//do something with json
})
Комментарии:
1. теперь функция возвращает { «isFulfilled»: false «isRejected»: false}
2. спасибо, это работает, но мне пришлось изменить «var thesenjsondata = JSON.parse(res);» на «var thesenjsondata = res;»
3. Рад, что смог помочь!