2017-11-28 3 views
0

사용자가 다른 행의 데이터베이스에 삽입해야하는 데이터 배열을 게시하는 동적 인 경우가 있습니다. 성공 또는 실패를 사용자에게 반환하기 전에 통화가 완료 될 때까지 기다리는 방법.사용자에게 반환하기 전에 콜백 대기 완료

나는 약속을 사용하여 시도하지만 내가 넣어 측면을 약속하지만, 생각 약속

req.targetting.forEach(data => { 
     let s = {}; 
     if (data.value == '' || data.value.length == 0) { 
     s = 99; 
     } else { 
     s = data.status; 
     } 
     let promises = new Promise((resolve, reject) => { 
     XXX.upsertWithWhere(where clause,data, (err, data) => { // a loopback method 
      if (err) { 
       return reject(err); 
      } 
      return resolve(data); 
      }); 
     }); 
     Promise.all(promises).then((err, data) => { 
     if (err) { 
      return callback(err); 
     } 
     callback(null, data); 
     }); 
    }); 
    }; 

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined (node:6216) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

내 산책로를 반환 거부 ID로 여전히 같은 오류 3

upsert 메서드의 서명

PersistedModel.upsertWithWhere([where], data, callback) 
+0

Promise.all()은 반복 가능한 객체를 사용합니다. 단일 약속 만 전달하는 것 같습니다. 또한 promise.all() 블록에서 callback() 함수를 반환합니다. 함수가 선언 된 위치는 어디입니까? 그것은'논쟁'에 있지 않다. –

+0

@KumarShubham 실수가 있습니다. 내가 원하는 것은 콜백이 완료되었을 때만 모든 약속을 얻고 돌아 오는 것입니다. – INFOSYS

+0

반복 불가능한 거부는 Promise.all에 반복 가능한 객체 대신 약속을 전달하기 때문에 발생합니다() 메소드를 호출합니다. –

답변

1

는이 같은 일이 (이 코드를 테스트 didnt는)

let promises = []; 
req.targetting.forEach(data => { 
let s = {}; 
if (data.value == '' || data.value.length == 0) { 
    s = 99; 
} else { 
    s = data.status; 
} 
let promise = new Promise((resolve, reject) => { 
    XXX.upsertWithWhere(whereclause,data, (err, data) => { // a loopback 
    //method 
    if (err) { 
    return reject(err); 
    } 
    return resolve(data); 
    }); 
}); 
promises.push(promise); 
}); 
Promise.all(promises).then((data) => { 
    return data; 
}) 
.catch((err) => { 
    return err; 
}); 
+1

감사의 뜻은 두 대답을 모두 받아 들일 수 있습니다. – INFOSYS

1

당신은 다른 방법에있는 당신의 반복을 포장 할 필요가 괜찮을 것 같아요. 약속 목록을 작성한 다음 약속이 해결 될 때까지 기다리십시오. 예 :

function orgMethod(){ 
      let promises =[]; 
      req.targetting.forEach(data => { 
        let s = {}; 
        if (data.value == '' || data.value.length == 0) { 
        s = 99; 
        } else { 
        s = data.status; 
        } 
        promises.push(new Promise((resolve, reject) => { 
        XXX.upsertWithWhere(where clause,data, (err, data) => { // a loopback method 
         if (err) { 
          return reject(err); 
         } 
         return resolve(data); 
         }); 
        })); 

       }); 
       }; 
    Promise.all(promises).then((err, data) => { 
        if (err) { 
         return callback(err); 
        } 
        callback(null, data); 
        }); 
     } 
+0

감사의 뜻 – INFOSYS