tôi muốn làm một cái gì đó như sau:Tôi có thể hứa hẹn đồng bộ trong thư viện JavaScript Q không?
delay(2500)
.then(function() { console.log("Step 1 done") })
.then(delay(7500))
.then(function() { console.log("Step 2 done") });
Vì vậy, thực hiện chậm trễ đã được chứng minh nhiều lần trước đây:
function delay(ms) {
var deferred = Q.defer();
setTimeout(deferred.resolve, ms);
return deferred.promise;
}
Nhưng nếu tôi chạy ở trên trong Node.js tôi nhận được:
... delay of 2500ms
Step 1 done
Step 2 done
... delay of ~7500ms
chứ không phải là những gì tôi mong đợi để xem:
... delay of 2500ms
Step 1 done
... delay of 7500ms
Step 2 done
Trong các ví dụ được cung cấp trên https://github.com/kriskowal/q/wiki/Examples-Gallery Tôi không thể tìm thấy bất kỳ ví dụ nào về chức năng đồng bộ (hàm trả về giá trị mà không có bất kỳ callback nào liên quan) bị xích với các hàm lời hứa.
Bất kỳ ý tưởng nào về cách kết hợp các hành động đồng bộ với lời hứa không đồng bộ?
Tôi đã thử:
function synchronousPromise() {
var deferred = Q.defer();
console.log("Synchronous function call");
deferred.resolve();
return deferred.promise;
}
delay(2500)
.then(function(){synchronousPromise()})
.then(function(){delay(7500)})
.then(function(){synchronousPromise()});
Và kết quả đầu ra này:
... delay of 2500ms
Time now is 2013-06-20
Time now is 2013-06-20
... delay of 7500ms
.. vẫn không phải những gì tôi đang cố gắng để đạt được.
Trong ví dụ đầu tiên của bạn, bạn đã thử '.then (function() {return delay (7500);})' thay vì '.then (delay (7500))'? –
@FelixKling hoạt động cho ví dụ đầu tiên và thứ hai! Làm cho câu trả lời của bạn và tôi sẽ chấp nhận. –
Bây giờ bạn có thể đạt được điều này mà không cần phải xác định thời gian trễ kiểm tra [answer] của tôi [http://stackoverflow.com/questions/17213297/can-i-make-a-synchronous-promise-in-the-javascript-q -library/33298652 # answer-33298652). –