gpt4 book ai didi

javascript - Node.js promise : get & save results

转载 作者:行者123 更新时间:2023-12-03 12:25:42 25 4
gpt4 key购买 nike

我是 Node.js Promise 的新手,我想做一些非常基本的事情:检索历史数据库中的“搜索”条目,检索历史记录中的“页面”条目,然后显示两者。

我已经写了这段代码,但它不起作用。第二个get_entries_of不起作用,因为最后的 console.log在有足够的时间调用数据库之前被调用。你能帮我吗?

var history = {};

var savePage = function(obj)
{
history.page = obj;
}

var saveSearch = function(obj)
{
history.search = obj;
}

var displayHistory = function()
{
console.log(history);
}

/** Promises chain */
historyLib.get_entries_of(uid, "page")
.then(function(obj) {
savePage(obj);
historyLib.get_entries_of(uid, "search");
}, console.log)
.then(function(obj) {
saveSearch(obj);
displayHistory();
}, console.log);

获取条目:

function get_entries_of(uid, type, date_start, date_end)
{
var deferred = Q.defer();

var extra = "";
if(typeof(date_start) !== 'undefined')
extra = ' ,"date": {"$gte": ' +date_start+ ', "$lt": ' +date_end+ '}';

history[type].find({ _uid: mongoose.Types.ObjectId(uid) + extra}, deferred.makeNodeResolver());

return deferred.promise;
}

最佳答案

如果没有更多详细信息,您的第一个 promise 回调似乎不会返回 promise 。因此,第一次搜索可能需要如下所示:

historyLib.get_entries_of(uid, "page")
.then(function(obj) {
savePage(obj);
return historyLib.get_entries_of(uid, "search");
}, console.log)
.then(/* go on here with the second search */)`

所以再一次:返回historyLib.get_entries_of(uid, "search");

注意我们在这里返回一个 promise 吗?实际上,我们返回 get_entries_of 返回的任何内容,这是一个 promise 。这意味着整个回调 (function(obj){}) 也将返回一个 Promise,并且该函数返回的任何内容都将附加到 Promise 链上。

这就是为什么你的第二个 promise 也会起作用。否则,您的第一个 then(cb) 回调(cb 事物)将返回 undefined,并且您无法调用 undefined 的 then()

你的 console.log 到底说了些什么?

另外,您确定当您也向该查询传递 start_date 时该查询也有效吗?这个: { _uid: mongoose.Types.ObjectId(uid) + extra} 看起来不正确,但我可能是错的。对我来说,它看起来像你想要的:

var criteria = {_uid: uid};
if(date_start) {
criteria.date = {
$gte: date_start
};// etc
}
stuff.find(criteria, callback);

关于javascript - Node.js promise : get & save results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24223491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com