Indexeddb: ¿Diferencias entre el éxito y el incompleto?

Utilizo dos eventos diferentes para que la devolución de llamada responda cuando la transacción IndexedDB finalice o sea exitosa:

Digamos ... db: IDBDatabase object, tr: IDBTransaction object, os: IDBObjectStore object

tr = db.transaction(os_name,'readwrite');
os = tr.objectStore();

caso 1 :

r = os.openCursor();
r.onsuccess = function(){
    if(r.result){
        callback_for_result_fetched();
        r.result.continue;
    }else callback_for_transaction_finish();
}

caso 2:

tr.oncomplete = callback_for_transaction_finish();

Es un desperdicio si ambos trabajan de manera similar. Entonces, ¿puedes decirme si hay alguna diferencia entre ellos?

Respuestas a la pregunta(3)

Su respuesta a la pregunta