Я надеюсь, что кто-то, кто использует Q module в Node.js, может мне посоветовать.Node.JS - Q Module - Promises
Итак, мой вопрос:
Это, как правило, необходимо создать более одного promise, если вы пытаетесь выполнять несколько функций в последовательности?
Например, я пытаюсь создать приложение, которое:
1) Read data from a file (then)
2) Opens a database connection (then)
3) Executes a query via the database connection (then)
4) Store JSON dataset to a variable (then)
5) Close Database connection. (then)
6) Perform other code base on the JSON dataset I've stored to a variable.
В сыром Node.js, каждый метод объекта ожидает обратный вызова, и для того, чтобы сделать эти задачи в правильном порядке (а не одновременно, что бы не сработало), мне нужно связать эти обратные вызовы вместе, используя уродливое количество вложенности кода.
Я обнаружил Q module, что предотвращает вложение через концепцию Promise.
Однако, в моей первой попытке использовать Q, я пытаюсь сделать обещание из всего, и я думаю, что я мог бы слишком усложнять свой код.
Я думаю, что, возможно, вам действительно нужно создать один объект обещания для выполнения описанных выше шагов и что для меня может быть ненужным преобразовать каждый метод в обещание с помощью метода Q.denodeify.
Например, в моем коде я буду подключаться к базе данных db2 с помощью модуля ibm_db. Вероятно, из-за непонимания, я конвертируются все методы IBM_DB обещаниям так:
var ibmdb = require('ibm_db');
var q = require('q');
var ibmdbOpen = q.denodeify(ibmdb.open);
var ibmdbConn = q.denodeify(ibmdb.conn);
var ibmdbClose = q.denodeify(ibmdb.close);
var ibmdbQuery = q.denodeify(ibmdb.query);
Является ли это действительно необходимо?
Для того, чтобы сделать одну вещи после других в Q, является необходимым для меня denodeify каждого метода, который я буду использовать в моем сценарии?
Или я могу просто создать одно обещание в начале скрипта и использовать метод q.then для выполнения всех асинхронных функций в последовательности (без блокировки).
Если вы собираетесь использовать обещания, то да, это имеет смысл сделать генераторную обещание функции для каждого. Вы также можете изучить асинхронную библиотеку в качестве альтернативы обещаниям (https://github.com/caolan/async), хотя я лично предпочитаю обещания. –