0
我想打包函數中的一些邏輯。邏輯應評估承諾的結果,然後返回一個值或拋出一個異常(根據承諾的值返回條件)。JS:條件返回函數包裝承諾返回函數
讓我分享一個simpliefied代碼:
function GetID(exp, db){
let rxPtt = new RegExp(exp, 'gi');
let tID = db.collection('Col').find(
{ "Name": { $regex: rxPtt }}, {"_id": 1}).toArray();
let retVal = null;
tID.then(function (x){
if(x.length > 1){
console.log("More than one");
} else if (x.length < 1) {
console.log("Less than one");
} else {
retVal = x;
}
});
return retVal;
}
MongoClient.connect(url, function(err, db) {
if(err) throw err;
console.log(GetID('t', db));
db.close(function(){
console.log("Close connection");
})
});
這將返回:
# ./SmallScripts.js
null
Close connection
More than one
問題: 我感興趣的是如何從一個承諾包裝有條件返回值。如果我只是傳承諾言並最終確定它,它就會起作用(見下文)。不過,我想把整個邏輯放到一個地方,然後返回ID。讓我知道這應該做的正確的方式和任何提示如何可能的話考慮它。謝謝!
function X(db){
let r = db.collection('Col')
.find(
{ "Name": { $regex: /t/i}}, {"_id": 1}
).toArray();
return r;
}
MongoClient.connect(url, function(err, db) {
if(err) throw err;
let r = X(db);
r.then(function(res){
if(res.length > 1){
console.log("More than one");
} else if (res.length < 1) {
console.log("Less than one");
} else {
console.log(res);;
}
);
db.close(function(){
console.log("Close connection");
})
});
經過一些額外的研究,似乎沒有任何意義,期望異步調用結果被打印在同步階段(最外面的程序範圍)。就像這裏所說:https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call –