2017-09-13 79 views
0

我有以下代碼:如何返回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,但我可能沒有正確設置它們,因爲它們也沒有工作。

感謝您的幫助!

回答

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庫與「用」的插件。 JavaScript Promises可幫助您管理異步調用,而無需傳遞迴調函數。

你會調用此代碼如下所示:

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

成功到達「然後」,故障到達「抓」子句。