ОБНОВЛЕНИЕ: решено!
Единственное необходимое изменение - await
вызова API для return
, затем карта возвращалась с именами изображений и идентификаторами. Все еще пытаюсь преобразовать карту в массив, но этот вопрос для этого поста решен. Вот новая распечатка:
1 face detected from image Family1-Son1.jpg with ID 98091e1e-bc8d-4c93-a850-a115684a6e6e
Family1-Son1.jpg
1 face detected from image Family1-Dad3.jpg with ID f94360f5-feb3-4d14-816f-7d854fc0b34c
Family1-Dad3.jpg
[ { '0': 'F',
'1': 'a',
'2': 'm',
'3': 'i',
'4': 'l',
'5': 'y',
'6': '1',
'7': '-',
'8': 'D',
'9': 'a',
'10': 'd',
'11': '3',
'12': '.',
'13': 'j',
'14': 'p',
'15': 'g',
id: 'f94360f5-feb3-4d14-816f-7d854fc0b34c' },
{ '0': 'F',
'1': 'a',
'2': 'm',
'3': 'i',
'4': 'l',
'5': 'y',
'6': '1',
'7': '-',
'8': 'S',
'9': 'o',
'10': 'n',
'11': '1',
'12': '.',
'13': 'j',
'14': 'p',
'15': 'g',
id: '98091e1e-bc8d-4c93-a850-a115684a6e6e' } ]
[ <2 empty items> ]
[]
Я перепробовал много разных методов здесь, не могу заставить их работать. Этот самый близкий я пришел. Я пытаюсь вызвать API, но для каждого элемента в массиве. Я не могу сделать это в обычном цикле, так много причин, почему нет. Поэтому кто-то сказал, использовать функцию array.map () вместо цикла. Я получил это далеко:
const IMAGE_BASE_URL = 'https://csdx.blob.core.windows.net/resources/Face/Images/'
let sourceImageFileNames = ['Family1-Dad3.jpg', 'Family1-Son1.jpg']
// Detect faces in the source image array, then get their IDs
let sourcefaceMap = await Promise.all(sourceImageFileNames.map(async (imageName) => {
// Returns a Promise<DetectedFace[]>
await client.face.detectWithUrl(IMAGE_BASE_URL + imageName)
.then((faces) => {
console.log(`${faces.length} face detected from image ${imageName} with ID ${faces[0].faceId}`)
let id = faces[0].faceId
return { ...imageName, id }
}).catch((err) => {
console.log(`No face detected in: ${sourceImageFileNames[0]}.`)
throw err;
})
}))
let values = Object.values(sourcefaceMap)
console.log(values)
// Create an array to store the source face IDs
var sourceFaceIds = new Array(sourceImageFileNames.length)
console.log(sourceFaceIds)
let ids = sourceFaceIds.filter((id)=> {
return id != null;
})
console.log(ids)
Значения, похоже, присутствуют при отладке, но затем, когда я пытаюсь вернуть карту, она выводится как неопределенная. Несмотря на то, что карта выполняет цикл для получения каждого идентификатора (как видно из двух верхних операторов печати). Вот моя распечатка:
VERIFY
1 face(s) detected from image Family1-Dad3.jpg with ID f94360f5-feb3-4d14-816f-7d854fc0b34c
1 face(s) detected from image Family1-Son1.jpg with ID 98091e1e-bc8d-4c93-a850-a115684a6e6e
[ undefined, undefined ]
[ <2 empty items> ]
[ <2 empty items> ]
Вот снимок экрана с идентификатором, имеющим значение, когда я наведите курсор на него в операторе возврата:
В основномЯ пытаюсь выполнить вызов API с изображениями URL, затем API свяжет идентификатор с каждым лицом на изображении. Мне нужен вызов API, чтобы вернуть все эти идентификаторы. В этом случае это только 2 идентификатора. Как мне это сделать? В конце моего кода мне просто нужен массив этих идентификаторов. Вот и все. Спасибо.