- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 NodeJS 中编写一个 API,其中使用 Mongoose 和 BlueBird。关于 promise 链,我的数据应该通过 waterfall 函数,但事实并非如此。让我的示例从 getTagNames
开始获取一些 JSON
,将数据提供给 retrieveTag
进行查询,最后得到 res.json()
.
exports.getTagValues = function (req, res) {
var userId = req.params.uid;
getTagNames(req, res)
.then(retrieveTag)
.then(function (data) {
console.log('tags', data);
res.json(200, data);
})
.catch(function(err){
console.log('err', err);
//handle Error
})
}
这是我的玩具数据,
function getTagNames(req, res) {
var userId = req.params.uid;
return new Promise.resolve({
'userId': userId,
'variables': [
{ id: 1, name: 'hotel', type: 'String' },
{ id: 2, name: 'location', type: 'String' }
],
})
}
我查询数据的方式。在 mongo 内部查询后,我检查是否有带有 userID
的文档。如果没有,插入并返回文档。注意 Tag
是我的 mongo 模型
function retrieveTag(data){
Tag.findOne({'userId': data.userId})
.exec()
.then( function(tag){
if (tag) {
console.log('result', tag);
// do something ...
return tag;
}
else {
var newTag = new Tag({
advertiserId: advertiserId,
variables: variables
});
newTag.save()
.then(function () {
console.log('newTag', newTag);
return newTag;
});
}
})
}
这是我的结果(userId
是 1
),我的期望是 console.log('tags', data);
发生在那么所有data
不应该是未定义
tags undefined
GET /api/tag/values/1 200 3ms
newTag { __v: 0,
userId: '1',
_id: 581b96090e5916cf3f5112fe,
variables:
[ { type: 'String', name: 'hotel', id: 1 },
{ type: 'String', name: 'location', id: 2 } ] }
我的问题是如何解决它。如果有不清楚的地方,请帮我指正。
最佳答案
解释有点不清楚,但如果我按照你的说法正确的话,你会在 promise 解析链中丢失数据。
在阅读您的代码时,我注意到 retrieveTag
不会返回 Mongoose promise 。让 getTagValues
中的 .then
使用 retrieveTag
中找到的数据。
所以改成这样:
function retrieveTag(data){
return Tag.findOne({'userId': data.userId})
.exec()
.then( function(tag){
...
})
}
关于javascript - Mongoose 里面的 promise 改变发生得很晚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40410329/
我正在使用ScheduledExecutorService使用 scheduleAtFixedRate 方法每小时提供一次数据库更新。问题是它逐渐变得更晚 - 在长期服务中我一直在记录它并且每天大约一
我有一个连接到 UILabel 的 UIDatePicker。我希望用户选择 18 年前的生日(年龄限制)。所以我用这一行来设置 maximumDate 值: datePicker.maximumDa
当我重新启动设备时,我收到 BOOT_COMPLETED广播比其他应用程序慢得多(大约 10-15 秒后)。 我看过this .但我不认为这是完全正确的。我如何(我认为)证明它是错误的: (让我们将
我有一个从 DatePickerDialog 的 onDateSetListener 调用的 TimePickerDialog,以便允许用户依次选择日期和时间。我将信息存储在日历对象 calendar
我需要查找客户是否在上一年和下一年进行了订阅,以及下一年有多少订阅是新的或被取消的。 示例数据: 身份证订阅年份120101201112019220112201232010 考虑这种方法:在订阅年份中
我必须编写一个 JavaScript 函数来检查两个日期(格式为 dd/MM/yyyy)的时间间隔是否最多为 3 个月。 我可以从两个文本框中检索两个值(无需检查格式,我已经获得了一个可以自动正确设置
我有一个输入框,类型为“时间”。我想将迟到时间 (23:00pm) 作为最小值,将早期时间 (6:00am) 作为最大值 - 创建一个 23pm - 6am 的范围。 (即中午 11 点、中午 12
我是一名优秀的程序员,十分优秀!