Javascript Promise在函数完成之前解析

Javascript Promise在函数完成之前解析,javascript,promise,Javascript,Promise,在下面的代码中,attenCalendar.refresh;方法调用一系列请求/响应并异步执行。需要完成此操作才能使Attendar.getItem成功。我使用了Promission来解决它,但显然Promission在刷新完成之前就解决了,并导致Attendar.getItem返回null。 我如何阻止序列直到刷新完成 yield promise_attendee1_assert(); function attendeeRefresh(){ let deferred = Promise.

在下面的代码中,attenCalendar.refresh;方法调用一系列请求/响应并异步执行。需要完成此操作才能使Attendar.getItem成功。我使用了Promission来解决它,但显然Promission在刷新完成之前就解决了,并导致Attendar.getItem返回null。 我如何阻止序列直到刷新完成

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方法,该方法在发生更改时被调用。