2016-10-20 1 views
0

Течение:Как создать уникальный ключ в мангусте на узле js?

  1. сгенерировать currentKey (ключ состоит из 3-х слов, разделенных -)
  2. проверить, если какой-либо документ в моей коллекции уже есть currentKey.
  3. Если это не так - currentKey будет вставлен в мой конкретный документ в моей коллекции.
  4. Но если это - 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

Обещаны предназначены для этого.

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); 
Смежные вопросы