"NPMが単一の約束を使用してサーバー要求を集約する"または "... accumulate server requests ..."を検索しても、何も明らかになりませんでした。コメントに記載されているES6の約束を使ってモックアップコードを共有して、おそらく他の提案がない場合の解決策の基礎を形成するでしょう。以下のようになり、「保証」の部分については
/******* application code ********/
function requestKeys(keyArray) {
// promise an oject for values of keys in keyArray:
// use asynchronous code to get values for keys in keyArray,
// return a promise for the parsed result object.
// ...
}
const latency = 100; // maximum latency between getting a key and making a request
/******** generic code *********/
var getKey = ((requestKeys, latency) => {
// return a function to return a promise of a key value object
var promise = null;
var resolve = null;
var reject = null;
var pendingKeys = null;
var defer =() => {
promise = new Promise((r,j) => {resolve = r; reject = j});
pendingKeys = [];
};
var running = false;
var timesUp =() => {
resolve(requestKeys(pendingKeys));
running = false;
}
var addKey = (key) => {
if(! running) {
defer();
setTimeout(timesUp, latency);
running = true;
}
pendingKeys.push(key);
return promise;
}
return addKey;
})(requestKeys, latency);
/******* test code *******/
// redefine requestKeys to promise an object with key strings as key values,
// resolve the return promise synchronously for testing:
function requestKeys(keyArray) {
var keyObj = keyArray.reduce(((obj, v) => ((obj[v] = v), obj)), {});
return new Promise((resolve, reject) => resolve(keyObj));
}
var log = obj => console.log(JSON.stringify(obj));
// get two keys quickly
getKey("holas").then(log);
getKey("buono").then(log);
// wait and get another
setTimeout(function(){getKey('later').then(log)}, 500);
...等保証されません - 連結約束は通信障害のため拒否した場合、約束のすべての受信者が拒絶反応をキャッチすることができます。しかし、特定のキーが不明な場合、有効なキーの受信者は続行する必要があります。だから私の提案は無効な個々のキーのサーバーから無効な値を返すことです。さもなければ、アルゴリズムはうまくいくように見える(28行のコードをモックアップする;-)) – traktor53