本文整理汇总了TypeScript中lru_map.LRUMap类的典型用法代码示例。如果您正苦于以下问题:TypeScript LRUMap类的具体用法?TypeScript LRUMap怎么用?TypeScript LRUMap使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了LRUMap类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1:
function setRejected<I, V>(cache: LRUMap<I, Result<V>>, input: I, error: any) {
const result = cache.get(input)
if (result) {
const newResult: RejectedResult = result as any
newResult.status = REJECTED
newResult.value = error
return newResult
} else {
const newResult: RejectedResult = {
status: REJECTED,
value: error
}
cache.set(input, newResult)
return newResult
}
}
示例2: fetch
function accessResult<I, V>(
cache: LRUMap<I, Result<V>>,
fetch: (input: I) => Promise<V>,
input: I
): Result<V> {
let entry = cache.get(input)
if (entry === undefined) {
const thenable = fetch(input)
thenable.then(
value => {
if (newResult.status === PENDING) {
const resolvedResult: ResolvedResult<V> = newResult as any
resolvedResult.status = RESOLVED
resolvedResult.value = value
}
},
error => {
if (newResult.status === PENDING) {
const rejectedResult: RejectedResult = newResult as any
rejectedResult.status = REJECTED
rejectedResult.value = error
}
}
)
const newResult: PendingResult = {
status: PENDING,
value: thenable
}
cache.set(input, newResult)
return newResult
} else {
return entry
}
}
示例3: remove
function remove() {
cache.delete(input)
if (input !== inputRef.current) return
forceUpdate()
}
示例4: readFile
readFile(filename, (err: Error | null, data: Buffer) => {
const content = err ? null : data.toString();
sourceFiles[filename] = content;
// We always want to set the cache, even to null which means there was an error reading the file.
// We do not want to try to read the file again.
FILE_CONTENT_CACHE.set(filename, content);
count++;
if (count === filenames.length) {
resolve(sourceFiles);
}
});
示例5: read
function read() {
const result = accessResult(cache, fetch, input)
switch (result.status) {
case PENDING: {
throw result.value
}
case RESOLVED: {
if (forceFetch) {
cache.delete(input)
}
return result.value
}
case REJECTED: {
if (forceFetch) {
cache.delete(input)
}
throw result.value
}
}
}
示例6: resolve
}>(resolve => {
const sourceFiles: {
[key: string]: string | null;
} = {};
let count = 0;
// tslint:disable-next-line:prefer-for-of
for (let i = 0; i < filenames.length; i++) {
const filename = filenames[i];
const cache = FILE_CONTENT_CACHE.get(filename);
// We have a cache hit
if (cache !== undefined) {
// If it's not null (which means we found a file and have a content)
// we set the content and return it later.
if (cache !== null) {
sourceFiles[filename] = cache;
}
count++;
// In any case we want to skip here then since we have a content already or we couldn't
// read the file and don't want to try again.
if (count === filenames.length) {
resolve(sourceFiles);
}
continue;
}
readFile(filename, (err: Error | null, data: Buffer) => {
const content = err ? null : data.toString();
sourceFiles[filename] = content;
// We always want to set the cache, even to null which means there was an error reading the file.
// We do not want to try to read the file again.
FILE_CONTENT_CACHE.set(filename, content);
count++;
if (count === filenames.length) {
resolve(sourceFiles);
}
});
}
});
示例7: resetFileContentCache
export function resetFileContentCache(): void {
FILE_CONTENT_CACHE.clear();
}