Tôi đang sử dụng rethinkDB với Node.js. Các yêu cầu sau hoạt động tốt:
hàm myFn () {
trả về co(hàm *() {
hãy truy vấn;
truy vấn = năng suất r.db("my-db")
.table("ứng dụng")
.filter(r.row("id").eq(id))
.run(conn);
trả về query.toArray();
});
}
Tôi muốn trả về nhiều không đồng bộnăng suất
kết quả, nhưng không thành công:
hàm myFn () {
trả về co(hàm *() {
hãy truy vấn, truy vấn2;
truy vấn = r.db("my-db")
.table("ứng dụng")
.filter(r.row("id").eq(id))
.run(conn);
query2 = r.db("my-db")
.table("ứng dụng")
.lọc(...)
.run(conn);
lợi nhuận trả về {q1 : truy vấn, q2 : truy vấn2};
});
}
Sau đó với mỗi phần tử tôi phải gọi toArray()
, vì vậy trong chức năng gọi điện, tôi thực hiện như sau:
// sử dụng ramda.js
var res = R.map((el) => {
return el.toArray();
}, mang lại myFn);
Nhưng tôi nhận được:
{
"q1": {
"isFulfill": sai,
"bị từ chối": sai
},
"q2": {
"isFulfill": sai,
"bị từ chối": sai
}
}
Ngoài ra còn có một số điều kỳ lạ:
// cái này hoạt động hoàn hảo
return q.toArray();
// cái này trả về như sau:
return {q: q.toArray()};
"q": {
"isFulfill": đúng,
"bị từ chối": sai,
"Giá trị thực hiện": [ ... ]
}
Tôi nghi ngờ tôi đã bỏ lỡ nó năng suất
hoạt động, vậy làm thế nào để trả lại nhiều năng suất
Kết quả hoàn thành của kết quả?
năng suất
Không áp dụng cho các đối tượng chứa Promise - nó chỉ áp dụng cho chính Promise. thay vì returnfield {q1: truy vấn, q2: query2};
bạn phải làm điều này
return {q1: truy vấn lợi nhuận, q2: truy vấn lợi nhuận2};
Tuy nhiên, điều này hơi rắc rối vì trong truy vấn
Sẽ không ném trước khi hoàn thành truy vấn2
lỗi trong. vì vậy nếu bạn khôngchỉ muốn thực hiện chúng một cách tuần tự , bạn sẽ phải sử dụng Hứa.tất cả
Để chờ một bộ Lời hứa "song song":
var [q1, q2] = suất Promise.all([truy vấn, query2]);
trả về {q1, q2};
(Tùy thuộc vào thư viện Promise bạn sử dụng, cũng có thể có hàm trợ giúp coi đối tượng là một tập hợp chứ không chỉ là một mảng)
Tôi là một lập trình viên xuất sắc, rất giỏi!