Promise, Async/Await và Map/Reduce
Có một cái sai mà người ta thường hay mắc phải khi làm việc với async/await
, đó là khi kết hợp nó với các hàm Array.map/Array.reduce
, họ hiểu sai tác dụng của async/await
, dẫn tới việc kết quả trả về không như ý.
Giả sử ta có hàm parseUrl(<url>)
nhận vào một chuỗi (là địa chỉ của một RSS feed), và trả về danh sách các item có trong RSS feed đó, mà ở đây chúng ta biểu diễn bằng một mảng [article]
, kết quả trả về thông qua Promise
, nội dung hàm này như nào thì không ảnh hưởng nhiều tới bài viết, nên chả cần ghi ra làm gì:
// parseUrl :: string -> Promise [article]
Khi sử dụng await
, ta có thể lấy kết quả của Promise
đó như thế này, có thể minh họa bằng sơ đồ:
await parseUrl("https://thefullsnack.com/rss.xml");
, async/await
, cũng giống như mọi khái niệm khác trong JavaScript, luôn cực kì rắc rối và khó hiểu cho tới chừng nào chúng ta... hiểu nó.
Mình biết điều này vì chính mình cũng đã lười đọc tài liệu, dẫn đến làm sai, nên mới có bài viết này