1

2 つの機能に違いはありますか?

最近Promise.all、コントローラー内での使用中に問題が見つかりました。ビューは完了前にレンダリングさPromise.allれ、ビュー内に空の変数が表示されます。

したがって、1 つを使用して 1 つm.requestの API をヒットすると、ビューはそれが完了するまで待機します。m.request包み込んでたくさん使えPromise.allば待ったなし!私は何か間違ったことをしていますか?

これは正しい動作ですか?はm.syncどういうわけか動作が異なりますが、と同じ署名を持っているようPromise.allです ?

ありがとう。

編集

関連ビットを含むコード

// Does two requests and wraps them in Promise.all
Table.show = (id, load) => {
  var header = m.request({
    method: "GET",
    url: cfg.apiurl(`/tables/${id}`),
  });
  var body = m.request({
    method: "POST",
    url: cfg.apiurl(`/tables/${id}`),
    data: {
      data: load
    }
  });
  return Promise.all([header, body]);
};

// The component
var ShowTable = {
  controller, view
};

// Controller function
function controller() {
  this.header = m.prop({});
  this.records = m.prop([]);
  this.pages = m.prop(0);

  var load = {
    filter: {},
    paging: {
      number: 1,
      size: 10
    }
  };

  var showTable = () => {
    Table.show(m.route.param("id"), load).then((res) => {
      this.header(res[0].data);
      this.records(res[1].data);
      this.pages(res[1].meta.pages);
    }, (res) => {
      popa();
    });
  };

  showTable();

}

// View function
function view(vm) {
  return m("div", [
    m("p", vm.header()),
    m("p", vm.records()),
    m("p", vm.pages()),
  ]);
}

EDIT2

はい、m.sync動作します。しかし、Promise.allそうではありません。

4

1 に答える 1