将数据传递到JavaScript承诺中
我使用jQuery插件jQuery indexeddb来处理indexeddb 我当前的问题是,我想向objectStore添加一个对象,但前提是该对象不存在于另一个特定的objectStore中 目前我正在使用下面的代码,但问题是.add函数为对象已经存在的每个调用提供了一个异常,这意味着我在for循环的每个过程的承诺之外生成的order对象保持不变 我能做些什么来解决这个问题 更新将数据传递到JavaScript承诺中,javascript,jquery,promise,indexeddb,Javascript,Jquery,Promise,Indexeddb,我使用jQuery插件jQuery indexeddb来处理indexeddb 我当前的问题是,我想向objectStore添加一个对象,但前提是该对象不存在于另一个特定的objectStore中 目前我正在使用下面的代码,但问题是.add函数为对象已经存在的每个调用提供了一个异常,这意味着我在for循环的每个过程的承诺之外生成的order对象保持不变 我能做些什么来解决这个问题 更新 function fillStoreWithJson(data, store) { var promises
function fillStoreWithJson(data, store) {
var promises = [];
$.each(data,function (index,element) {
store.add(element);
orderIsFinished(element["AUFTRAGNR"]).done(function (result) {
if (result === false) {
var def = new $.Deferred();
store.add(element).done(function (result, event) {
def.resolve(result);
});
promises.push(def);
}
});
});
return $.when.apply(undefined, promises).promise();
然后这样做:
fillStoreWithJson(orderJson, orderObjectStore).done(function() {
showOrderList();
});
add
用于添加新记录。使用put
创建新记录或更新记录。能否显示确切的orderIsFinished
功能?它目前缺少一个结束符}
,而且在执行返回后调用promise.fail(…)
也不太令人放心。另外,什么是getFinishedOrders
,它的结果是什么.get()
方法?错误到底是什么,它是在哪里创建的?您显示的代码不够,我不理解您所说的“这意味着order对象保持不变”是什么意思。也许你想给我们看看这些对象的生成代码?另外,预期的结果是什么,它们应该有什么不同?嘿@Bergi,很抱歉回答得太晚了。我已经纠正了上面的oderIsFinishedMethod。get()方法返回一个promise对象,其中包含一个事件,说明操作是成功还是失败。错误是,内部orderIsFinished(order[“AUFTRAGNR”]),然后是(函数(结果){order对象保持不变,例如,我的数据数组中有5个订单,但在for循环中,我得到了5倍相同的订单,因此它试图将5倍相同的订单添加到数据库中,这是不可能的。这很难解释,我不知道为什么会这样。哦,我现在明白了问题所在,你忘记使用闭包并继续请在所有回调中引用相同的order
变量。重复的变量有很多示例。我个人建议使用迭代器方法,如.map
、.forEach
或$。每个。