#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();
}