Это просто очень распространенная проблема вызова «несвязанных» методов . Вы можете передать контекст в качестве опции Promise.promisify
, чтобы связать его:
var getNotifications = Promise.promisify(adapter.getNotifications, {context: adapter});
. Кроме того, вам нужно будет .bind()
использовать этот метод или вызвать новая функция getNotifications
на adapter
(используя .call()
). Вы также можете использовать Promise.promisifyAll(adapater)
, а затем просто позвонить adapter.getNotificationsAsync(…)
.
Обратите внимание, что это все еще не работает. Вы не можете просто создавать обещания в цикле - вам нужно их явно ждать и возвращать обещание от обратного вызова then
, иначе только возвращаемое вами значение undefined
будет немедленно передано на следующий обратный вызов.
adapter.getUsers().then(function(users) {
return Promise.all(users.rows.map(function(item){
var dbUser = "sigalei/" + item.value.name;
console.log(dbUser);
return getNotifications(dbUser);
}));
}).then(function(results) {
for (var i=0; i
Вместо Promise.all(users.rows.map(…))
, в Bluebird вы также можете использовать Promise.map(users.rows, …)
.
Доступ MS не исправляет пространство для записей, пока Вы не уплотнили базу данных.
Это - что-то, что необходимо регулярно делать к базе данных доступа как часть Вашего обслуживание иначе, Вы закончите с некоторыми довольно болезненными проблемами.
можно уплотнить базу данных любой через Доступ MS, UI (Инструменты-> Утилиты Базы данных->
Компактный и База данных Восстановления) Вас может использовать использование командной строки:
msaccess.exe "target database.accdb" /compact
N.B. Компактный переключатель / должен быть после целевой базы данных
Доступ MS не освобождает пространство, использованное записями даже после того, как они будут удалены. Можно освободить пространство вручную, когда Вы должны или автоматически каждый раз, когда Вы закрываете приложение.
, Чтобы сделать это вручную, используйте утилиту Compact и Repair:
Резервное копирование Ваша база данных, как существует ошибка в Access 2007 , который может удалить Вашу базу данных во время процедуры уплотнения.
при уплотнении многопользовательской (общей) базы данных, которая расположена на сервере или совместно используемой папке, удостоверьтесь, что ни у кого больше нет ее открытый.
В меню Tools, укажите на Утилиты Базы данных, и затем нажмите Compact и Repair Database.
, Чтобы сделать это автоматически, когда Вы закрываете приложение:
Открывают базу данных, что Вы хотите Доступ MS к компактному автоматически.
В меню Tools, нажмите Options, и затем выберите вкладку "Общие".
Выбор Компактное На поле Строгого контроля.
После удаления данных и уплотнения базы данных не удивлены, еще больше ли, чем 100 КБ. Существует определенное количество издержек, которые не могут быть удалены после добавления данных в первый раз.
кроме того, остерегайтесь того AutoNumber, значения полей ведут себя по-другому, чем рекламируемый после процедуры уплотнения: Согласно документации Access 2000 MS, если Вы удаляете записи из конца таблицы, которая имеет поле AutoNumber, уплотняя базу данных, сбрасывает Значение с автонумерацией. Таким образом, Значение с автонумерацией следующей записи, которую Вы добавляете, будет одним большим, чем Значение с автонумерацией последней восстановленной после удаления записи в таблице.
я имею не , нашел, что это имело место: Если Вы имеете 100 Автоматически пронумерованных записей и удаляете последние 50, следующая запись AutoNumber (согласно документации) должна быть пронумерована "51". Но по моему опыту это пронумеровано "101", вместо этого.
Первой остановкой, как уже упоминалось, должна быть попытка сжать / восстановить базу данных. Однако вы также можете немного сэкономить размер, создав новую базу данных и импортировав все объекты из старой. Кроме того, преобразование его в MDE должно дать вам больше волос. Как всегда, не играйте с производственной копией. Кроме того, если вы используете MDE, сначала убедитесь, что вы правильно разбили базу данных.
Вы можете уплотнить базу данных из кода, используя JRO. См: http://support.microsoft.com/kb/230501