多次调用方法后返回相同promise的模式
Patterns for returning same promise after calling method multiple times
给定我有一个执行异步操作并返回promise的方法,该方法在操作完成时得到解析-我如何确保在操作完成前多次调用时,我得到相同的promise。编辑当我在操作完成后调用它时-我想获得当前操作的新承诺。。
一种选择是记住调用(记忆),例如通过外部范围中的变量跟踪承诺
var p;
function test() {
if (p) return p;
p = new Promise(res) {
res();
p = null;
}
return p;
}
还有其他更好的解决方案吗?
您在这里使用的方法被称为记忆化,很难想出更好的方法。
您可能想要做的是将乏味的部分(保存在外部范围、重用、删除)从函数本身中分离出来。或者甚至使用库:
import reusePromise from 'reuse-promise';
function test() {
return new Promise(function (res) {
res();
});
}
const reusableTest = reusePromise(test);
完整示例
"use strict";
const reusePromise = require('reuse-promise').default;
let i = 0;
function test() {
return new Promise(resolve => {
setTimeout(() => resolve(i++), 100);
});
}
const reusableTest = reusePromise(test);
reusableTest().then(console.log).catch(console.err);
reusableTest().then(console.log).catch(console.err);
reusableTest().then(console.log).catch(console.err);
setTimeout(() => {
reusableTest().then(console.log).catch(console.err);
reusableTest().then(console.log).catch(console.err);
reusableTest().then(console.log).catch(console.err);
}, 200);
// output: 0 0 0 1 1 1
相关文章:
- 使用promise和mongoose对文档进行排序
- Javascript,访问一个主要对象模块模式中的每个对象
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 测试Angular Service解决错误回调中的promise
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- D3.js模式不适用于弧形或圆环图
- 多次调用方法后返回相同promise的模式
- angular ui bootstrap:当模式关闭时,promise被解析/拒绝
- 用于处理带有promise的外部接口中的参数的设计模式
- 日志记录时避免 Promise 构造函数反模式
- 为什么来自 Promise '.then' 方法的回调是反模式
- 如何实现Typescript异步等待模式:Promise在哪里
- Promise模式-使用Promise.all()
- Javascript Promise反模式错误
- 如何使用promise .all来避免promise构造函数反模式
- 如何在检测器模式中使用dojo/promise/ promise .cancel()
- 什么'这是Promise.dedefer的正确模式