При использовании транзакций Sequelize с асинхронным ожиданием можно ли вернуть обещание? - PullRequest
0 голосов
/ 28 декабря 2018

Предположим, у меня есть таблица с именем Item с полем с именем "name".Существует уникальное ключевое ограничение на поле имени.Почему эти две функции ведут себя по-разному, вызывая их с помощью await?Разница лишь в том, что один ждет, прежде чем уничтожить предмет, а другой возвращает обещание уничтожения.Разве эти виды использования не должны быть идентичными?

const createAndDestroyWorksFine = async (name) => {
    await Item.create({ name })
    const item = await Item.findOne({ where: { name } });
    await item.destroy();
}

const createAndDestroyCausesError = async (name) => {
    await Item.create({ name })
    const item = await Item.findOne({ where: { name } });
    return item.destroy();
}

async function test() {
    // this works
    await transaction(createAndDestroyWorksFine('item'));
    await transaction(createAndDestroyWorksFine('item'));

    // this fails often, with a duplicate key error
    await transaction(createAndDestroyCausesError('item'));
    await transaction(createAndDestroyCausesError('item'));
}

test()
...