Например, я пишу случайный генератор с crypto.randomBytes(...) вместе с другими асинхронными функциями. Чтобы избежать падения аддона, я мог бы использовать функцию синхронизации crypto.randomBytes. Я сомневаюсь, что если я это сделаю, моя программа node будет останавливаться каждый раз, когда я буду выполнять код?. Тогда я подумал, есть ли список асинхронных функций, которые их время для запуска очень короткое, они могут работать как синхронные функции, тогда разработка с помощью этого списка функций будет легкой.
Какие функции могут работать синхронно в node.js?
Ответ 1
Используя модуль mz, вы можете сделать crypto.randomBytes() возврат обещания. Используя await (доступно в Node 7.x, используя флаг --harmony), вы можете использовать его следующим образом:
let crypto = require('mz/crypto');
async function x() {
  let bytes = await crypto.randomBytes(4);
  console.log(bytes);
}
x();
Приведенный выше неблокирующий, хотя он выглядит как блокирующий.
Для лучшей демонстрации рассмотрите этот пример:
function timeout(time) {
  return new Promise(res => setTimeout(res, time));
}
async function x() {
  for (let i = 0; i < 10; i++) {
    console.log('x', i);
    await timeout(2000);
  }
}
async function y() {
  for (let i = 0; i < 10; i++) {
    console.log('y', i);
    await timeout(3000);
  }
}
x();
y();
И обратите внимание, что для выполнения этих двух функций требуется много времени, но они не блокируют друг друга.
Запустите его с помощью Node 7.x, используя:
node --harmony script-name.js
Или с Node 8.x с:
node script-name.js
Я покажу вам эти примеры, чтобы продемонстрировать, что это не выбор асинхронизации с аддоном обратного вызова и синхронизация с хорошим кодом. Вы действительно можете запустить асинхронный код очень элегантно, используя новый async function и await, доступный в ES2017 - хорошо читать об этом, потому что не многие знают о эти функции.
Ответ 2
Они асинхронны, учатся справляться с этим.
 Promises сейчас, а в будущем ES2017 await и async сделает вашу жизнь намного проще.
 Bluebirds promisifyAll чрезвычайно полезен при работе с любым стандартным API-интерфейсом обратного вызова Node.js. Он добавляет функции с тегами async, которые возвращают обещание вместо того, чтобы требовать обратного вызова.
const Promise = require('bluebird')
const crypto = Promise.promisifyAll(require('crypto'))
function randomString() {
  return crypto.randomBytesAsync(4).then(bytes => {
    console.log('got bytes', bytes)
    return bytes.toString('hex')
  })
}
randomString()
  .then(string => console.log('string is', string))
  .catch(error => console.error(error))