는 (약속 라이브러리는 이전 버전의 브라우저에 사용할 수 있습니다) : 동기 실행 (다음 다음 예를 들어 1 2 3)
function asyncFunction (item, cb) {
setTimeout(() => {
console.log('done with', item);
cb();
}, 100);
}
let requests = [1, 2, 3].reduce((promiseChain, item) => {
return promiseChain.then(new Promise((resolve) => {
asyncFunction(item, resolve);
}));
}, Promise.resolve());
requests.then(() => console.log('done'))
프로세스의 모든 비동기 요청없이 보장
프로세스 모든 요청을 "동기"실행이
let requests = [1,2,3].map((item) => {
return new Promise((resolve) => {
asyncFunction(item, resolve);
});
})
Promise.all(requests).then(() => console.log('done'));
(2보다 빠른 1을 마무리 할 수있다) 나는 그 길에 그것을했다
Promise.all(body.schedules.map(function(scheduleId) {
return new Promise(function(resolve, reject) {
return scheduleSchema.findOneAndRemove({
_id: scheduleId
})
.then(function() {
logSchema.insert({
userId: req.user.id,
actId: constants.LOG_SCHEDULE_DELETE.id,
extData: scheduleId
});
resolve();
})
.catch(function(err) {
reject(err);
});
});
})).then(function() {
return res.json({
code: constants.SUCCESS_CODE
});
}).catch(function(err) {
return res.json(constants.DATABASE_ERROR);
});
이 모든 항목이 처리 된 후 그 콜백이 실행됩니다 보장하지 않습니다
function callback (result) { console.log('all done'); }
[1, 2, 3].forEach((item, index, array) => {
asyncFunction(item,() => {
if (index === array.length - 1) {
callback();
}
});
});
마지막 예. 가장 마지막 항목이 처리 된 후에 콜백이 실행되도록 보장합니다.
More information
마이클.
async로 작업중인 버전 :'user_collection.findOne ({ \t \t \t \t _id : userId를 \t \t \t} 함수 (에러, 사용자) { \t \t \t \t 경우 (에러) \t \t \t \t \t 콜백 (오차) 다른 \t \t \t \t { \t \t \t \t \t async.forEach (user.contac ts, 함수 (연락처, 콜백) { \t \t \t \t \t \t console.log (연락처); \t \t \t \t \t \t은 (contact.accepted == '참') { \t \t \t \t \t \t \t user_collection.findOne는 ({ \t \t \t \t \t \t \t \t는 _id 경우 : \t \t \t을 contact.contactId \t \t \t \t}, fu nction (에러, 연락처) { \t \t \t \t \t \t \t \t result.push (연락처); \t \t \t \t \t \t \t \t callback(); \t \t \t \t \t \t \t}) \t \t \t \t \t \t} \t \t \t \t \t} 함수 (에러) {콜백 (에러 결과)}) \t \t \t \t} \t \t \t}); ' – johnny