【问题标题】:How can I handle an async function in another another asyc function?如何在另一个异步函数中处理异步函数?
【发布时间】:2020-03-24 19:56:45
【问题描述】:

我正在使用 Wordnet 创建字典条目并将它们放入我的数据库中。这是一个辅助函数,它接收一个单词并返回一个对象,然后将其插入数据库。

var fs = require('fs');  // req for natural and wordnet-db
const natural = require('natural');
const wordnet = new natural.WordNet();

const generateWordEntry = word => {
   let wordObj = {};
   wordObj.definition = "";

   wordnet.lookup(word, function(entries) {
      entries.forEach((entry)=>{
         wordObj.word = word;
         wordObj.definition += entry.gloss.replace(/"/g, "'"  ).trim() + '***' ; 
      });
  });

  return wordObj;
}

上面的函数是异步的(我认为)。我想使用这个辅助函数来生成一个 wordObj 对象,然后将条目添加到我的数据库中:

function insertWordsToDeck(words) {
   let words2List = words.split('\n').map(word=>word.trim());
   let generateEntries = words2List.map(word=>generateWordEntry(word));

   return db('words')
      .insert(generateEntries, 'id')
}

我知道数据库调用是异步的,但是如何合并其他函数?

【问题讨论】:

    标签: javascript asynchronous wordnet


    【解决方案1】:

    从阅读 this 关于 Promisesasync / await 开始。然后看文档——https://github.com/morungos/wordnet,你可以使用返回promise的特殊函数,所以你的代码会是这样的:

    const wordObj = await lookupAsync(word);
    await insertWordsToDeck(wordObj);
    

    也有用:How to rewrite a callback function in Promise

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      相关资源
      最近更新 更多