首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >然后在蓝知更鸟中调用函数

然后在蓝知更鸟中调用函数
EN

Stack Overflow用户
提问于 2017-05-31 20:13:12
回答 1查看 79关注 0票数 0

我如何才能调用一个函数,然后()呢?我是蓝鸟的新手,以前我只会触发回调,通知被调用的函数是用它的东西完成的。

这是我的“主代码”,它将地区数据插入到我的Mongo和Redis数据库中。

代码语言:javascript
复制
var promise = Language.findOne({}).exec()

promise.then(function(languages) {
    /* If collection is empty initialize it */
    if(!languages)
        return insertLanguagesIntoMongoDB()
})
.then(function() {
    /* Make sure it's cached in Redis */
    return insertLanguagesIntoRedis()
})
.catch(function(err) {
    throw err
})

这是我的函数的样子,但它说“回调不是函数”:

代码语言:javascript
复制
function insertLanguagesIntoRedis(callback) {
    logger.info("Inserting languages into redis db")
    var promise = Language.find({}).exec()
    promise.then(function(languages) {
        if(!languages)
            throw new Error("Couldn't find any languages in MongoDB's Language collection")

        var languageJson = []
        for(var i=0; i<languages.length; i++) {
            var object = {}
            object.id = languages[i].iso_code
            object.text = languages[i].name_en
            languageJson.push(object)
        }
        redis.set('languages', JSON.stringify(languageJson))
        return callback()
    })
    .catch(function (err) {
        throw err
    })
}

那么,如何正确地定义和调用我的insertLanguagesIntoRedisinsertLanguagesIntoMongoDB函数呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 20:33:48

类似这样的东西可能会起作用:

  1. 把语言传递到承诺链中
  2. 在链的末尾,将承诺返回到下一步。
  3. 调整下一步以接受这些语言
  4. 调整insertLanguagesIntoRedis以接受语言
  5. 让insertLanguagesIntoRedis返回承诺链
  6. 从insertLanguagesIntoRedis中删除回调调用

变量允诺= Language.findOne({}).exec()

代码语言:javascript
复制
promise.then(function(languages) {
    /* If collection is empty initialize it */
    if(!languages)
        insertLanguagesIntoMongoDB()
     return languages
})
.then(function(languages) {
    /* Make sure it's cached in Redis */
    return insertLanguagesIntoRedis(languages)
})
.catch(function(err) {
    throw err
})

function insertLanguagesIntoRedis(languages) {
    logger.info("Inserting languages into redis db")
    var promise = Language.find({}).exec()
    return promise.then(function(languages) {
        if(!languages)
            throw new Error("Couldn't find any languages in MongoDB's Language collection")

        var languageJson = []
        for(var i=0; i<languages.length; i++) {
            var object = {}
            object.id = languages[i].iso_code
            object.text = languages[i].name_en
            languageJson.push(object)
        }
        redis.set('languages', JSON.stringify(languageJson))
    })
    .catch(function (err) {
        throw err
    })
}

更新per @Bergi

代码语言:javascript
复制
var promise = Language.findOne({}).exec()

promise.then(function(languages) {
    /* If collection is empty initialize it */
    if(!languages)
        insertLanguagesIntoMongoDB()
     return languages
})
.then(function(languages) {
    /* Make sure it's cached in Redis */
    return insertLanguagesIntoRedis(languages)
});

function insertLanguagesIntoRedis(languages) {
    logger.info("Inserting languages into redis db")
    var promise = Language.find({}).exec()
    return promise.then(function(languages) {
        if(!languages)
            throw new Error("Couldn't find any languages in MongoDB's Language collection")

        var languageJson = []
        for(var i=0; i<languages.length; i++) {
            var object = {}
            object.id = languages[i].iso_code
            object.text = languages[i].name_en
            languageJson.push(object)
        }
        redis.set('languages', JSON.stringify(languageJson))
    })
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44293888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档