Это предварительно ES6 JS. Это не asyn c в смысле async / await или на основе обещаний. sr c Но это асин c, в котором полно рекурсивных обратных вызовов.
РЕДАКТИРОВАТЬ: Как делать то, что вы хотите:
Несмотря на то, что я использую функции const и arrow, это очень старая школа Javascript, в которой вы должны навязывать порядок выполнения путем вложения обратных вызовов. Также, извините за добавление loda sh, но я просто всегда к нему обращаюсь; Я не знаю, как использовать JS без него.
const natural = require('natural');
const _ = require('lodash')
const wordnet = new natural.WordNet();
const tokenizer = new natural.WordTokenizer();
const sent = "Welcome to callback hell."
const setSyns = {}
const handleLookup = (word, syns) => {
setSyns[word] = syns
}
const doLast = () => {
console.log(setSyns)
}
// callback to wordnet.lookup gets passed an array of objects
// one property of which is `synonyms`
// also, use a tokenizer
tokenizer.tokenize(sent).forEach((word, idx, words) => {
wordnet.lookup(word, x => {
synsList = _.flatMapDeep(x, y => y.synonyms)
handleLookup(word, _.uniq(synsList))
if (idx == words.length - 1) {
doLast()
}
})
})
console.log(setSyns) // logs {} because this is executed before the loop is done