Javascript 有点像';onImport';存在于js中?

Javascript 有点像';onImport';存在于js中?,javascript,Javascript,有两个文件 文件1 import { getSingleRunningPromiseFunction } from "./main" const getSingleRunningPromise = getSingleRunningPromiseFunction.bind({ singlePromise: undefined, promise: undefined, running: false, }); getSingleRunningPromise() 文件2 i

有两个文件

文件1

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>
}