Ошибка и нет ошибки с тем же кодом: не удалось выполнить 'положить' на 'IDBObjectStore' - PullRequest
0 голосов
/ 13 мая 2019

У меня проблема с моим кодом, выдает ошибку: Unhandled Rejection (DataError): Failed to execute 'put' on 'IDBObjectStore': Evaluating the object store's key path did not yield a value.

Хотя у моего помощника нет таких проблем с тем же кодом, тем же URL-адресом git, чистая установка этого кода выдает мне ошибку, и он хорошо работает с кодом.

выдает ошибку на db.fieldsets.put () Возможно, проблема в индексе или первичном ключе, но код работает на другом устройстве, поэтому моя проблема не в коде

dexie_db.js:

import Dexie from 'dexie';
const db = new Dexie('fieldsets');
db.version(1).stores({
         fieldsets:'++id, user',

});

экспорт по умолчанию, дБ;

import * as global from '../../global';
import getFields from './field-defs';
import db from '../../dexie_DB'

let g_fieldsets = [];

async function readFieldsets(fsetKey){
fsetKey = fsetKey+'_offers'
let res;
const userSets = await db.fieldsets.get(fsetKey);
if(!userSets || userSets.v !== 
process.env.REACT_APP_OFFERS_FIELDSET_VERSION){
    const defaultSets = [{
        name: 'Все поля',
        favourite: true,
        data:getFields().map((it,i)=>({
                name:it.name,
                hidden: false,}))
    },];
    res = defaultSets
    console.log(fsetKey,defaultSets)
    console.log('1')
    console.log(db)
    db.fieldsets.put({
        user: fsetKey,
        v:process.env.REACT_APP_OFFERS_FIELDSET_VERSION,
        data: defaultSets
    })
}else{
    res = userSets.data
}
g_fieldsets = res.map(it=>({
    ...it,
    data:it.data.map(item=>({
        ...item,
        def: getFields().find(def=> item.name===def.name)
    }))
}))
global.events.fieldsetsUpdated.next(null)
}

global.currentUser.subscribe(u=>{
if(u){
    readFieldsets(u.login)
}else{
    g_fieldsets = []
}
})

export function getFieldsets(force){
if(force || !g_fieldsets.length){
    if(!global.currentUser.getValue()){
        return [];
    }
    let _ = (readFieldsets(global.currentUser.getValue().login))
}
return g_fieldsets;
}

export function validate(name, it){
return {
    valid: null,
    msg: null
};
}

export function isEntityValid(it){
if(!it){
    return false
}if(!it.supplierId || !it.supplierId.length){
    return false
}if(!it.amount || it.amount<0){
    return false
}if(!it.offeredPrice || it.offeredPrice<0){
    return false
}
return true;
}

возможно, есть какие-то драйверы, некоторые программы, некоторые вещи, которые могут испортить хороший рабочий процесс

1 Ответ

0 голосов
/ 14 мая 2019

Я думаю, у вас уже есть база данных с тем же именем и таблицами, но без первичного ключа с автоинкрементом.

Например, вы сначала выполнили такой код:

import Dexie from 'dexie';
const db = new Dexie('fieldsets');
db.version(1).stores({
         fieldsets:'id, user',
});

Затем вы изменили идентификатор на ++ id.

Попробуйте удалить базу данных в вашем браузере и снова открыть ее.Может быть сделано в devtools или через Dexie.delete ('fieldsets'). Then (...).

...