【发布时间】:2017-11-14 08:40:28
【问题描述】:
与下面引用的一些以前的帖子类似,我正在尝试通过 Thunk 链接 dispatch,但是我的困难在于从 Sequelize 返回。我可以看到 MySQL 查询命中数据库并返回数据,但是该返回没有通过 action-creator 流向后续的.then
我认为这是我尝试使用 Sequelize 的方式 - 我是新手。
非常感谢!
代码:
initDB.js
...
export function sequelizeQry(qryName: string) {
let query;
// For later query mapping
switch (qryName) {
case 'POSummary':
query = qry.spPOLedgerCardSummaryALL;
break;
default:
query = qry.spPOLedgerCardSummaryALL;
}
return new sequelize.Promise(
() => sequelize.query(query, { type: sequelize.QueryTypes.RAW })
.then((response) => {
console.log('Returning promise: ', response); //<-- This hits the console with data
return response;
})
);
}
database-actions.js
// @flow
import { fetchingQuery } from '../action-creators/database-creators';
const fetchQuery = (qryName: string) =>
(dispatch: *) => dispatch(fetchingQuery(qryName));
export default fetchQuery;
database-creators.js
// @flow
// Action Types
import { FETCH_QUERY } from '../constants/ActionTypes';
import { sequelizeQry } from '../utils/initDB';
/** Action-creators */
export function fetchingQuery(qryName: string) {
const actionType = FETCH_QUERY;
return (dispatch: *) => {
dispatch({ type: `${actionType}_PENDING` });
sequelizeQry(qryName) //<-- This gets called
.then((payload) => dispatch({ //<-- Don't seem to get here
type: `${actionType}_FULFILLED`,
payload
}))
.catch(err =>
// Dispatch the error action with error information
dispatch({
type: `${actionType}_REJECTED`,
error: err
})
);
};
}
我检查过的其他一些参考资料:
【问题讨论】:
-
sequelize.Promise是标准承诺吗?如果是这样,您需要将resolve作为参数传递给promise executor/handler,然后调用resolve(response)而不是return response。 -
看起来就是这样,非常感谢。 FLOW 一直在唠叨在
.then中需要return,我停止思考......非常感谢! -
其实
return resolve(response)让FLOW 很开心……我更新了以下内容。再次感谢。
标签: reactjs redux react-redux sequelize.js redux-thunk