我的程序下載大量數據,對其進行處理,並通過返回的函數使其可用。該程序會下載下載的消息,因此我添加了許諾以等待數據到達。函數中的承諾
function dataSource(...) {
var _data = null;
// download: a promise that returns data for the _data object.
let download = function() { ... }
return function(...) {
if (!_data) {
download(...).then(data => _data = data).done();
}
var datum = _data[key];
var outbound = doSomethingWithData(datum);
return outbound;
}
}
我的代碼是這樣構造的,因爲Engine
返回的函數使我的代碼非常整齊。
var generate = dataSource(param1,param2);
var fullName = generate("malename")+" "+generate("malename")+" "+generate("surname");
的具體要求是:
- 和下載數據只有一次。
- 按任意次數按鍵查詢數據,無需再次下載數據。
- 不要更改現有的接口。
我可以有dataSource
返回一個承諾,而不是一個函數。我知道使用承諾的模式是什麼樣子。但是這會迫使我重寫使用這個函數的代碼。這種模式在整個代碼中廣泛使用,並且改變它並不是一個可接受的解決方案。
我該如何構造這個以確保我的函數在它沒有返回承諾之前不會返回數據?
的可能的複製[如何從一個異步回調函數的返回值?](http://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function) – Hacketo
根本不是該問題的重複。不同的要求。 –