как получить доступ к функции в обещании

#es6-promise

Вопрос:

мой код в приложении react

У меня есть I класс:

 class SampleModuleController{

    getSampleModuleSheet()
    {
       console.log("getSampleModuleSheet");
       return tableSheet;
    }
    retrivePageData(pageNumber,pageLength){
        
        console.log("retrivePageData calledd");
        let pageData= asyncAwaitService.findTablePageTestData(pageNumber,pageLength);
        return pageData;
    }
}

export let sampleModuleController = new SampleModuleController();
 

Класс SampleModuleController лениво загружен, и его метод getSampleModuleSheet может успешно использоваться.

в jsx:

 <DataTable getPageData={import('../controllers/sampleModuleContrller').then(({sampleModuleController}) => {return sampleModuleController.retrivePageData;})} />
 

в файле js:

 async newPageManager(){
    console.debug("this.props.getPageData------",this.props.getPageData);
    let pageData = await props.getPageData(1,34);
}
 

вышел из строя

введите описание изображения здесь

так как же я могу назвать эту функцию внутри обещания

Комментарии:

1. Кем вы ожидаете this стать? Как называется ваша функция?

2. Так что же есть this.props.getPageData . С чего ты взял, что это была функция? Можете ли вы дать определение этого свойства?

3. потому что in out put (журнал) отображается как функция с «f»

4. основываясь на выводе, я бы подумал , что это либо (await this.props.getPageData).retrievePageData(1, 34) или (await this.props.getPageData)(1, 34) , так как это указывает на обещание, когда оно будет выполнено, вернет именованную функцию. вы пробовали какой-либо из этих подходов?

5. @Brett Caswell я использовал ваше второе решение, и оно works.im здесь мы пытаемся создать компонент, который пользователь может использовать в качестве свойства для загрузки любых данных, которые ему нужны .поэтому не знаю имени функции. поэтому я использовал ваше второе решение.пожалуйста, добавьте его в качестве ответа

Ответ №1:

в вашем jsx очевидно, что обещание возвращает делегат метода.

Таким образом, this.props.getPageData при решении с await будет создан делегат метода, который сам будет вызываться.

мы изменим ваш фрагмент следующим образом;

 async newPageManager(){
    console.debug("this.props.getPageData------",this.props.getPageData);
    let getPageData = await props.getPageData; 
    let pageData = getPageData(1,34);
}
 

кроме того, поскольку props.getPageData это возвращает обещание, оно тогда выполнимо.

таким образом, вы можете передать результат этого обещания в then область действия функции-что-то вроде следующего

 async newPageManager(){
    console.debug("this.props.getPageData------",this.props.getPageData);
    let getFirstPagePromise = props.getPageData.then((fn) => fn.bind(this, 1, 32)); 
    let getFirstPage = await getFirstPagePromise;
    let pageData = getFirstPage();
}