yield []&yield all() - ES6 / redux-saga之间的差异

问题描述 投票:4回答:1

使用redux-saga的yield all([])而不是ES6内置的yield []有什么优势吗?

为了并行运行多个操作,redux-saga建议:

const result = yield all([
  call(fetchData),
  put(FETCH_DATA_STARTED),
]);

但是没有all()方法可以实现同样的目的:

const result = yield [
  call(fetchData),
  put(FETCH_DATA_STARTED),
];

哪一个更好?为什么?

javascript ecmascript-6 yield redux-saga
1个回答
7
投票

没有功能差异,因为MateuszBurzyński(redux-saga维护者)解释了here

在引擎盖下它们都是相同的,yield [...effects]将导致弃用警告,并通知你关于all

引入它是为了使并行行为显式化,并且很好地反映了Promise.all

它最好使用all(),因为它告诉读者我们在这里产生的效果超过1,但是如果没有它,yield的各种用途仍然有用:

产生具有多种效果的物体

const { company, profile } = yield {
  company: select(getCompany),
  profile: select(getUserProfile, userId),
};

产生一个数组文字

yield [
  put(userRequestSucceeded(userId)),
  put(userReceived(response.data)),
];

使用map生成一个数组

yield userIds.map(userId => call(fetchUserDetails, userId));
© www.soinside.com 2019 - 2024. All rights reserved.