Как насчет просто
var getNotifications = Promise.promisify(adapter.getNotifications.bind(adapter));
или, возможно,
var getNotifications = Promise.promisify(function () {
return adapter.getNotifications.apply(adapter, arguments);
});
?
Я не уверен, что хорошо понимаю вашу проблему, но это должно убедитесь, что this
привязан, а не undefined
, когда вы делаете return getNotifications(dbUser);
В более общем случае, где могло быть много сотен отображений к каждому из новых значений, Вы будете составлять отдельную таблицу старых и новых значений, и затем использовать это в операторе UPDATE. На одном диалекте SQL:
CREATE TEMP TABLE mapper (old_val CHAR(5) NOT NULL, new_val CHAR(5) NOT NULL);
...multiple inserts into mapper...
INSERT INTO mapper(old_val, new_val) VALUES('a.1', 'a1');
INSERT INTO mapper(old_val, new_val) VALUES('a-1', 'a1');
INSERT INTO mapper(old_val, new_val) VALUES('b.1', 'b1');
INSERT INTO mapper(old_val, new_val) VALUES('b-1', 'b1');
...etcetera...
UPDATE tbl
SET title = (SELECT new_val FROM mapper WHERE old_val = tbl.title)
WHERE title IN (SELECT old_val FROM mapper);
Оба избранных оператора крайне важны. Первым является связанный подзапрос (не обязательно быстро, но быстрее, чем большинство альтернатив, если таблица картопостроителя имеет тысячи строк), который вытаскивает новое значение из таблицы отображения, которая соответствует старому значению. Второе гарантирует, что только те строки, которые имеют значение в таблице отображения, изменяются; это крайне важно как иначе, заголовок будет установлен в NULL для тех строк без отображающейся записи (и те были записями, которые были в порядке, прежде чем Вы начали).
Для нескольких альтернатив, операции СЛУЧАЯ в порядке. Но если у Вас будут сотни или тысячи или миллионы отображений для выполнения, затем Вы, вероятно, превысите пределы длины SQL-оператора в Вашем DBMS.
Или
Update Table set
title = Replace(Replace(title, '.', ''), '-', '')
Where title Like '[ab][.-]1'
Если преобразования так же просты как Ваши примеры, Вы могли бы сделать обновление с определенной обработкой строк:
UPDATE tbl
SET title = left(title, 1) + right(title, 1)
WHERE title IN ('a-1', 'a.1', 'b-1', 'b.1')
что-то хотело бы ту работу за Вас?
Можно использовать один оператор и много операторов выбора
update tbl
set title =
case
when title in ('a-1', 'a.1') then 'a1'
when title in ('b-1', 'b.1') then 'b1'
else title
end
, Конечно, это вызовет запись на каждой записи, и с индексами, это может быть проблема, таким образом, можно отфильтровать только строки, Вы хотите измениться:
update tbl
set title =
case
when title in ('a-1', 'a.1') then 'a1'
when title in ('b-1', 'b.1') then 'b1'
else title
end
where
title in ('a.1', 'b.1', 'a-1', 'b-1')
, Который сократит количество записей к таблице.
Отделывание ответа Jonathan.
UPDATE tbl
SET title = new_val
FROM mapper
WHERE title IN (SELECT old_val FROM mapper)
AND mapper.old_val = tbl.title;
Его начальная версия потребовала бы большого количества чтений к таблице картопостроителя.