Promise.join
mất hứa hẹn như tất cả các đối số của nó nhưng đối số cuối cùng của nó, là hàm.
Promise.join(Promise.delay(100), request("http://...com"), function(_, res){
// 100 ms have passed and the request has returned.
});
Bạn đang nuôi nó hai chức năng nên nó như sau:
- Thực hiện một lời hứa trên
function A() { ... }
- về cơ bản trả lại một lời hứa qua nó
- Khi hoàn thành công việc (ngay lập tức) thực hiện cuối cùng đối số,
function B() {... }
ghi nhật ký.
Xem tài liệu:
Promise.join(Promise|Thenable|value promises..., Function handler) -> Promise
Đối phối hợp nhiều lời hứa rời rạc đồng thời. Trong khi .all() là tốt để xử lý một danh sách kích thước động của các lời hứa đồng nhất, Promise.tham gia là dễ dàng hơn nhiều (và performant hơn) để sử dụng khi bạn có một số tiền cố định của lời hứa rời rạc mà bạn muốn phối hợp đồng thời, ví dụ:
var Promise = require("bluebird");
var join = Promise.join;
join(getPictures(), getComments(), getTweets(),
function(pictures, comments, tweets) {
console.log("in total: " + pictures.length + comments.length + tweets.length);
});
Cập nhật:
JSRishe đã đưa ra một cách thông minh để giải quyết loại này của mẫu in this answer mà trông giống như sau:
Promise.delay(100).return(request("http://...com").then(function(res){
// 100 ms have passed and the request has returned
});
Điều này làm việc vì yêu cầu đã xảy ra trước khi trả về chậm trễ vì hàm được gọi trong cùng phạm vi.
Nguồn
2014-09-15 07:42:18
Có điều gì '.join()' làm điều đó '.all()' không thể thực hiện? Hay nó chỉ là một cú pháp khác? – jfriend00
@ jfriend00 'Promise.join (p1, p2, ..., pn, fn)' hoạt động như 'Promise.all ([p1, p2, ..., pn]). Spread (fn)' ngoại trừ nó nhanh hơn một chút . Điều này rất hữu ích cho một số cố định của lời hứa và là đường đẹp cho việc sử dụng các lời hứa như proxy: 'var p1 = asyncOp(); var p2 = p1.then (otherOp); var p3 = p2.then (một lần nữa); Promise.join (p1, p2, p3, hàm (r1, r2, r3) {... '. Một lợi thế khác mà nó có là thông tin kiểu tốt hơn trong các ngôn ngữ như TypeScript vì nó dễ phân tích tĩnh hơn. –