2017-07-19 79 views
0

花了几个小时试图弄清楚如何在地图内并行运行传奇。传说里面的地图不起作用

试过了我发现的东西:yield result.map(item => call(api.endpoint, item)) 但似乎没有发生。

下面是我在做什么:在for循环工作完成后

export function* syncCanvasesByFolder(<someParams>) { 
    yield call(api.syncCanvasForFolder, <someParam>); 
} 

export default function* syncAllFoldersForSurvey(<someParams>) { 

    // Get list of folder for a survey 
    const folders = yield call(data.getFolderBySurvey, surveyId); 

    //For each folder sync canvases 

    yield all(folders.map(folder => { 
      call(syncCanvasesByFolder, folder.id, lastSyncedAt, access_token) 
    })); 

/*Sequential call*/ 
// for (const i in folders) { 
//  if (folders.hasOwnProperty(i)) { 
//   yield call(syncCanvasesByFolder, folders[i].id, lastSyncedAt, access_token); 
//  // yield call(canvasSyncSaga.syncAllCanvasesForFolder, folders[i].id, lastSyncedAt); 
//  } 
// } 
} 

顺序调用。但是地图内部似乎没有发生任何事情。没有得到任何exception/errors以及。

syncCanvasesByFolder当我使用地图时永远不会被调用。

+0

解决:只好内部地图返回 '产量均(folders.map (文件夹=> { 调用(syncCanvasesByFolder,folder.id,lastSyncedAt,access_token) }));' –

回答

0

要隐式返回,请不要使用大括号{}里面的函数。

用方括号(不工作)

yield all(folders.map(folder => { 
    call(syncCanvasesByFolder, folder.id, lastSyncedAt, access_token) 
})); 

无支架(工程)

yield all(folders.map(folder => call(syncCanvasesByFolder, folder.id, lastSyncedAt, access_token) 
));