从OfficeJS开始我遇到了一个非常奇怪的问题,有一些情况下,Office.context.document.settings.saveAsync不保存,但它不会抛出任何错误。为什么会这样?我没有找到一个模式来复制它,它只是有时发生,如果我做了一个重新加载它修复它。我使用的是带有Officejs的Angular 7。
Word Version 2304 Build 16.0.16327.20324)64位。
这就是我如何节省:
protected saveSetting<T>(key, val): Observable<T> {
return new Observable<T>(subscriber => {
try {
Office.context.document.settings.refreshAsync((asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log('saveAsync failed: ' + asyncResult.error.message);
}
Office.context.document.settings.set(key, val);
Office.context.document.settings.saveAsync((result) => {
if (result.status === Office.AsyncResultStatus.Failed) {
console.log('saveAsync failed: ' + result.error.message);
}
subscriber.next(val);
subscriber.complete();
});
});
} catch (e) {
subscriber.error('Error saving setting ' + key);
subscriber.complete();
}
});
}
我是这样得到值的:
protected getSetting<T>(key): Observable<T> {
return new Observable<T>(subscriber => {
try {
Office.context.document.settings.refreshAsync((asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log('saveAsync failed: ' + asyncResult.error.message);
}
subscriber.next(Office.context.document.settings.get(key));
return subscriber.complete();
});
} catch (e) {
subscriber.next(null);
return subscriber.complete();
}
});
}
谢谢!
我尝试调试,它从来没有返回错误,它似乎总是保存,但它没有。当我想执行get时,它返回null,因为它以前从未保存过。
1条答案
按热度按时间8ehkhllq1#
你的代码看起来都是正确的,一个可疑的部分是你可能在
saveSetting
之后很快调用getSetting
。你能试着把getSetting
放到saveSetting
的回调函数中吗?这意味着saveSetting
是异步的,你应该确保saveSetting
在你可以getSetting
之前完成。