流程是:
currentKey
(密钥由3个单词-
分隔)currentKey
。 currentKey
将粘贴到我的收藏中的特定文档中。currentKey
将重新生成并重新开始。问题是mongoose有异步回调,当查询完成执行时会运行。而且我不知道如何用这种异步流动来实现我的流程。作为示例(这只是为了方便起见的示例,它不是现有的框架等)我在php上做的就像下一个:
$currentKey = someService.GenerateKey();
//exists() returns true or false
while($db->find('tablename', ['key' => $currentKey])->exists())
{
$currentKey = someService.GenerateKey();
}
//It's update 'tablename' where `id` equals to $someUserId and set `key` to $currentKey value
$db->update('tablename', ['id' => $someUserId], ['key' => $currentKey]);
你能帮帮我吗?
答案 0 :(得分:0)
Promise就是为此而设计的。
function generateUniqueKey(modelId) {
return new Promise((resolve, reject) => {
currentKey = someService.GenerateKey();
MyModel.count({ key: currentKey })
.then(count => {
if (count > 0) {
generateUniqueKey(modelId);
} else {
MyModel.update({ id: modelId }, { $set: { key: currentKey } })
.then(resolve(currentKey));
}
})
.catch(err => reject(err));
});
}
generateUniqueKey(someUserId).then(key => console.log('Generated unique key:', key));
但是如果你不关心结果,你可以删除Promise
机制并让generateUniqueKey()
方法自行结束。
function generateUniqueKey(modelId) {
currentKey = someService.GenerateKey();
MyModel.count({ key: currentKey })
.then(count => {
if (count > 0) {
generateUniqueKey(modelId);
} else {
MyModel.update({ id: modelId }, { $set: { key: currentKey } })
.then(() => console.log('Generated unique key:', currentKey))
.catch(err => console.log(err));
}
})
.catch(err => console.log(err));
}
generateUniqueKey(someUserId);