내가 가지고있는 함수 인수는 비동기 함수 인 약속 반환하는 다음 함수에 반환하지 : 나는 시험에서에서 다음과 같이 함수를 호출 할 경우비동기 기다리고 있습니다 또는 약속 스트림 이벤트
createObjectFrom(record) {
const self = this;
return new Promise(async (resolve, reject) => {
let obj = {};
for(let i = 0, l = self.opts.transformers.length; i < l; i++) {
let transformer = self.opts.transformers[i];
const headerIndex = findIndex(self.headers, (header) => {
return header === transformer.column;
});
let csvValue = record[headerIndex];
const lookUp = transformer.options.lookUp;
const whereClause = {};
whereClause[lookUp.column] = csvValue;
console.log('before await');
const result = await self.knex(lookUp.table).where(whereClause).select(lookUp.scalar);
console.dir(result);
obj[transformer.field] = result[0][lookUp.scalar];
}
return resolve(obj);
});
}
을 모두 정확하게 실행 :
:it('creates the transformed object', async() => {
const csvRecord = ['PREMIER', '07/11/1998', manager, 'Liverpool', 'Wimbledon', 0, 1, 'A', 0, 1, 'A'];
const record = await transformer.createObjectFrom(csvRecord);
expect(record.division).to.equal('PREMIER');
}
을하지만 csv-parse에서 생성 된 스트림으로부터 발생 된 이벤트 동안 readablecreateObjectFrom
함수를 호출 할 때
onReadable() {
let record = this.parser.read();
if (record === null) {
return;
}
if (this.parser.count <= 1) {
this.headers = record;
} else {
const recordPromises = this.createObjectFrom(record);
this.recordPromises.push(newRecord);
}
}
코드에 createObjectFrom
console.log('before here');
const result = await self.knex(lookUp.table).where(whereClause).select(lookUp.scalar);
console.dir(result);
아래 console.log
문에 도달하지만 약속이 해결하지 않는 것으로 아래 console.dir
문에 도착하지 않습니다.
createObjectFrom
을 스트림 처리 외부의 테스트에서 호출하면 올바르게 해석됩니다.
리팩토링 비동기도 약속을 반환하기 위해 기다리고 있지만 여전히 파손 상태입니다.
If I console.dir the promises on the [end][3] event of the stream they look like this:
[ Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined },
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined } ]
나는 소스 코드와 실패한 테스트를 가지고 this REPO 있습니다.
나는 무슨 일이 벌어지고 있는지에 대해 당혹 스럽다.
it('creates the transformed object', async() => {
const csvRecords = [
['PREMIER', '07/11/1998', manager, 'Liverpool', 'Wimbledon', 0, 1, 'A', 0, 1, 'A'],
['PREMIER', '11/11/1998', manager, 'QPR', 'Sunderland',3,3, 'Sunderland',0,0,'Sunderland'],
['PREMIER', '14/11/1998', manager, 'Southampton', 'Liverpool', 3, 3, 'D', 0, 0, 'D']
];
for(var i = 0, l = csvRecords.length; i < l; i++) {
const csvRecord = csvRecords[i];
const record = await transformer.createObjectFrom(csvRecord);
expect(record.division).to.equal('PREMIER');
expect(record.manager_id).to.equal(manager_id);
}
}
내가 무엇을 놓치고 있는지 모르겠지만 우리는 피델을 놓치고 있습니다. – smnbbrv
브라우저가이 스크립트를 지원하지 않는 특별한 이유가 없습니다. 'await'는 es6 생성기 (또는 그들이 사용하는 것이 무엇이든)에 바벨로 변형 될 수 있습니다. 현대 크롬/파이어 폭스 브라우저에 충분해야합니다. – smnbbrv
당신은 다른 도움을받지 못할 가능성이 높습니다. 특정이며 임의의 추측 (높은 확률은 아님) 또는 디버깅만으로 해결할 수 있습니다. – smnbbrv