Я новичок в ОбещайPromise.map не возвращает значение
вот мой код
compileChatnameArray(company_id, paramArr) {
const Model = this;
let userObjIdArr = [];
return Promise.map(paramArr, function (paramObj) {
const chat_name = paramObj.customer_id;
const full_name = paramObj.firstname + paramObj.lastname;
let queryObj = Model.findOne({
chat_name: chat_name
})
.lean()
.select('_id')
.exec()
.then((user) = > {
if (user) {
userObjIdArr.push(user._id);
return userObjIdArr;
} else {
var bodyParam = {
_company_id: company_id,
chat_name: chat_name,
full_name: full_name
};
Model.add(bodyParam)
.then((newUser) = > {
userObjIdArr.push(newUser._id);
return userObjIdArr;
})
}
});
})
.then((userObjIdArr) = > {
debug(userObjIdArr);
return Promise.resolve(userObjIdArr);
})
}
Проблема заключается в том debug(userObjIdArr);
печатает [ undefined, undefined, undefined, undefined, undefined ]
для меня. (Мой массив состоит из 5 объектов)
// Отредактированная часть Я добавил часть решения Promise в функцию карты, которая дает мне проводные результаты. Я могу понять, что я просто за короткой логикой, но не мог понять, где.
compileChatnameArray(company_id, paramArr) {
const Model = this;
let userObjIdArr = [];
return Promise.map(paramArr, function(paramObj) {
const chat_name = paramObj.customer_id;
const full_name = paramObj.firstname + paramObj.lastname;
let queryObj = Model.findOne({ chat_name: chat_name})
.lean()
.select('_id')
.exec();
return new Promise(function(resolve, reject) {
// code starts here
queryObj.then((user) => {
if(user) {
userObjIdArr.push(user._id)
resolve(userObjIdArr);
} else {
//add user here
var bodyParam = {
_company_id : company_id,
chat_name : chat_name,
full_name : full_name
};
Model.add(bodyParam)
.then((newUser) => {
userObjIdArr.push(newUser._id)
resolve(userObjIdArr);
})
.catch((err) => {
reject(err);
});
}
});
queryObj.catch((err) => {
reject(err);
})
})
});
}
и теперь я получаю следующее в результате
[ [ "589d598f07e32926b4ae9d6b", "589d598f07e32926b4ae9d6c", "589d598f07e32926b4ae9d6e", "589d598f07e32926b4ae9d6f", "589d598f07e32926b4ae9d6d" ], [ "589d598f07e32926b4ae9d6b", "589d598f07e32926b4ae9d6c", "589d598f07e32926b4ae9d6e", "589d598f07e32926b4ae9d6f", "589d598f07e32926b4ae9d6d" ], [ "589d598f07e32926b4ae9d6b", "589d598f07e32926b4ae9d6c", "589d598f07e32926b4ae9d6e", "589d598f07e32926b4ae9d6f", "589d598f07e32926b4ae9d6d" ], [ "589d598f07e32926b4ae9d6b", "589d598f07e32926b4ae9d6c", "589d598f07e32926b4ae9d6e", "589d598f07e32926b4ae9d6f", "589d598f07e32926b4ae9d6d" ], [ "589d598f07e32926b4ae9d6b", "589d598f07e32926b4ae9d6c", "589d598f07e32926b4ae9d6e", "589d598f07e32926b4ae9d6f", "589d598f07e32926b4ae9d6d" ] ]
тогда мне нужно только
[ "589d598f07e32926b4ae9d6b", "589d598f07e32926b4ae9d6c", "589d598f07e32926b4ae9d6e", "589d598f07e32926b4ae9d6f", "589d598f07e32926b4ae9d6d" ]
Ваша функция отображения ничего не возвращает -> '' undefined' – Andreas
вернуть Model.findOne ({...}) .lean() ..... ' – Manu
Разве это не' return Model.findOne ... 'внутри функции' map'? – piotrbienias