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
そうではありません。