Javascript Promise在函数完成之前解析
在下面的代码中,attenCalendar.refresh;方法调用一系列请求/响应并异步执行。需要完成此操作才能使Attendar.getItem成功。我使用了Promission来解决它,但显然Promission在刷新完成之前就解决了,并导致Attendar.getItem返回null。 我如何阻止序列直到刷新完成Javascript Promise在函数完成之前解析,javascript,promise,Javascript,Promise,在下面的代码中,attenCalendar.refresh;方法调用一系列请求/响应并异步执行。需要完成此操作才能使Attendar.getItem成功。我使用了Promission来解决它,但显然Promission在刷新完成之前就解决了,并导致Attendar.getItem返回null。 我如何阻止序列直到刷新完成 yield promise_attendee1_assert(); function attendeeRefresh(){ let deferred = Promise.
yield promise_attendee1_assert();
function attendeeRefresh(){
let deferred = Promise.defer();
attenCalendar.refresh();
deferred.resolve("refreshed");
return deferred.promise;
}
function promise_attendee1_assert(){
let deferred = Promise.defer();
let promise = attendeeRefresh();
promise.then(function onRefreshed(refreshNote) {
dump("refreshedattendee"+refreshNote);
attenCalendar.getItem(attendItem.id, {
onGetResult: function onGetResult(cal, stat, type, detail, count, items) {
retrievedItem = items[0];
//prints null
dump("\nattendeeitem:"+retrievedItem.title);
},
onOperationComplete: function() {
deferred.resolve();
}
});
});
return deferred.promise;
}
当您使用承诺时,让attenCalendar.refresh返回承诺是有意义的。向我们展示refresh的代码我检查过,它不会返回承诺。@Marlio如果.refresh没有提供一种方法让您通过接受回调或返回承诺来钩住它的完成,那么您就不能钩住它的完成-就这么简单。承诺延迟者自己不知道异步计算何时完成。如果您阅读源代码,您将看到您可以使用一个侦听器调用replayChangesOn,该侦听器具有一个onResult方法,该方法在发生更改时被调用。