2017-09-13 14 views
0

私は、次のコードを持っている:updateDocument()はdb.insertが提供する結果を返すために、私は希望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); 
     } 
    }) 
    }); 
} 

を。しかし、変数を返そうとすると、定義されません(私は非同期呼び出しのため信じています)。 asyncawaitを試しましたが、うまく動作しなかったため、正しく設定していない可能性があります。

ありがとうございました!

答えて

4

これは「JavaScript非同期」問題です。あなたはそのようなあなたのupdateDocument機能を簡素化できます。これは、「約束」のプラグインとCloudantライブラリを使用している

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

。 JavaScriptプロミスは、コールバック関数を渡さずに非同期呼び出しを管理するのに役立ちます。

あなたがそうのように、このコードを呼び出します:成功「し、」に到着

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

、故障が「キャッチ」節に到着。

関連する問題