Javascript 有点像';onImport';存在于js中?
有两个文件 文件1Javascript 有点像';onImport';存在于js中?,javascript,Javascript,有两个文件 文件1 import { getSingleRunningPromiseFunction } from "./main" const getSingleRunningPromise = getSingleRunningPromiseFunction.bind({ singlePromise: undefined, promise: undefined, running: false, }); getSingleRunningPromise() 文件2 i
import { getSingleRunningPromiseFunction } from "./main"
const getSingleRunningPromise = getSingleRunningPromiseFunction.bind({
singlePromise: undefined,
promise: undefined,
running: false,
});
getSingleRunningPromise()
文件2
import { getSingleRunningPromiseFunction } from "./main"
const getSingleRunningPromise = getSingleRunningPromiseFunction.bind({
singlePromise: undefined,
promise: undefined,
running: false,
});
getSingleRunningPromise()
我想提取绑定逻辑,但此变体将在所有使用者之间共享绑定
export const getSingleRunningPromise = getSingleRunningPromiseFunction.bind({
singlePromise: undefined,
promise: undefined,
running: false,
});
是否可以提取绑定而不创建函数?例如,从“/main”导入{getSingleRunningPromise},但为每个消费者提供唯一的
此上下文
?您不能使用绑定
创建多个不同的此
值。我想你在找我
export function getSingleRunningPromise(...args) {
return getSingleRunningPromiseFunction.call({
singlePromise: undefined,
promise: undefined,
running: false,
}, ...args)
}
react的最终解决方案,现在应该是有效的
export function getSingleRunningPromise<TResult>(getPromise: (...args: any[]) => Promise<TResult>) {
return getSingleRunningPromiseFunction.call(
{
singlePromise: undefined,
promise: undefined,
running: false,
},
getPromise
);
}
export function useSingleRunningPromise<TResult>(getPromise: (...args: any[]) => Promise<TResult>, deps: any[]) {
return useCallback(getSingleRunningPromise(getPromise), deps);
}
导出函数getSingleRunningPromise(getPromise:(…args:any[])=>Promise){
返回getSingleRunningPromiseFunction.call(
{
单承诺:未定义,
承诺:未定义,
跑步:错,
},
获得承诺
);
}
导出函数useSingleRunningPromise(getPromise:(…args:any[])=>Promise,deps:any[])){
返回useCallback(getSingleRunningPromise(getPromise),deps);
}
用法
//react类组件
类MyComponent扩展组件{
private promise=getSingleRunningPromise(异步()=>…);
render(){
返回单击我
}
}
//反应钩
导出函数MyComponent(){
const promise=useSingleRunningPromise(异步()=>…);
返回单击我
}
顺便说一句,我试图在函数组件)}>中编写Click me
,但目前没有时间。我在这里玩。在所有情况下,所需输出均为1,2(或0,1)。并且不想在函数上添加任何修饰符。以后再看有没有可能。
是的,这非常接近,据我所知,如果我两次这样称呼,我将得到两个不同的单次运行承诺实例。这里的问题是,有时,它可以像匿名函数一样提供,例如
getSingleRunninePromise(async()=>…)
;从技术上讲,这可以是另一个匿名函数,但实际上不是,例如,在React中,在每次渲染时都会创建新的匿名函数。因此,我希望能够为一些调用返回相同的promise实例。在react中,他们有useCallback
,我想我希望smth类似。@Nikita“调用两次,我将得到两个不同的实例”-这不是您想要的吗?我以为您希望避免“变体将在所有消费者之间共享绑定”。是的,但我也希望能够在调用之间将此上下文保存为singleton,目前这是一个问题)我将尝试使用您的示例,有可能会采用它的感觉。@Nikita也许我不知道你的getSingleRunningPromiseFunction
做了什么,但是如果你想有时共享给对象,有时不共享,只需将原始的bind
调用放在一个函数中。有时一个消费者可以使用相同的承诺多次调用它,在这种情况下,需要在一个消费者的调用之间使this
保持静态,因为这是一个单一的运行承诺。
// react class component
class MyComponent extends Component {
private promise = getSingleRunningPromise(async () => ...);
render() {
return <button onClick={this.promise}>Click me</button>
}
}
// react hooks
export function MyComponent() {
const promise = useSingleRunningPromise(async () => ...);
return <button onClick={promise}>Click me</button>
}