如何返回Cloudant插入状态?

时间:2017-09-13 14:34:20

标签: node.js async-await cloudant

我有以下代码:

updateDocument = (data) => {
   Cloudant(CONN_STRING, (err, cloudant) => {
    if (err) {
        throw new Error('Failed to initialize Cloudant: ' + err.message);
    }

    let db = cloudant.db.use('my-db')

    db.insert(data, (err, result) => {
        if (err) {
            throw new Error('Failed to initialize Cloudant: ' + err.message);
        }
        else {
            console.log(result);
        }
    })
  });
}

我希望updateDocument()返回db.insert提供的结果。但是,如果我尝试返回一个变量,那么它是未定义的(我相信是因为异步调用)。我已经尝试asyncawait,但我可能没有正确设置它们,因为它们也没有用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

这是一个" JavaScript是异步的"问题。您可以像这样简化updateDocument函数:

updateDocument = (data) => {
   var cloudant = Cloudant({ url: CONN_STRING, plugin: 'promises');
   let db = cloudant.db.use('my-db')
   return db.insert(data);
}

这是使用Cloudant库和" promises"插入。 JavaScript Promises可以帮助您管理异步调用,而无需传递回调函数。

您可以这样调用此代码:

updateDocument({a: 1, :b})
  .then((data) => {
    console.log('success!', data);
  }.catch((e) => {
    console.log('oops!', e);
  });

成功到达'然后'失败到达' catch'子句。