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

时间:2017-12-20 14:37:17

标签: javascript ecmascript-6 yield redux-saga

使用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),
];

哪一个更好&为什么呢?

1 个答案:

答案 0 :(得分:7)

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

  

它们都是相同的,<html lang="en"> <head> <title>Full Name Resume</title> <meta charset=utf-8> </head> <body> <div> <section><h1 id = "name"><span class = "main">full </span> Name</h1></section><section> <ul id="contact"><li><span class = "main">Cell:</span> +1-000000000</li> <li><span class = "main">Email: </span> aaaaaa@gmail.com</li> <li><span class = "main">Location:</span> NY,USA.</li></ul></section> </div> <section id="workExperiance">Work Experience</section> </body> </html>会导致弃用警告,并通知您yield [...effects]

     

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

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

产生具有多种效果的对象

all()

产生数组文字

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

使用地图产生数组

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