2017-08-31 6 views
0

は現在、AWS documentationコールバックベースの関数をPromiseベースの関数に変換する方法は?

describeInstances(params = {}, callback) ⇒ AWS.Request 

それは、呼び出し側で

let getAwsInstancesInfo = function() { 
    console.log("getting AWS Instances information"); 
    return ec2.describeInstances(function (err, data) { 
     if (err) { 
      console.log("error in receiving instance information from EC2", err.stack); 
      return Promise.reject("error in receiving instance information from EC2"); 
     } else { 
      console.log("Total instances from EC2:", Object.keys(data["Reservations"]).length); 
      return Promise.resolve(data); 
     } 
    }); 
}; 

のように見えます使用のための私のコードのように見える機能を持って、私は、しかし

getAwsInstancesInfo().then(data => { 
    console.log("Total instances from EC2:", Object.keys(data["Reservations"]).length); 
}); 

を行いますそれは次のことを言わない。

index.js:12 Uncaught TypeError: Object(...)(...).then is not a function 
    at InstanceSummary.componentDidMount (index.js:12) 
    at ReactCompositeComponent.js:264 
    at measureLifeCyclePerf (ReactCompositeComponent.js:75) 
    at ReactCompositeComponent.js:263 
    at CallbackQueue.notifyAll (CallbackQueue.js:76) 
    at ReactReconcileTransaction.close (ReactReconcileTransaction.js:80) 
    at ReactReconcileTransaction.closeAll (Transaction.js:209) 
    at ReactReconcileTransaction.perform (Transaction.js:156) 
    at batchedMountComponentIntoNode (ReactMount.js:126) 
    at ReactDefaultBatchingStrategyTransaction.perform (Transaction.js:143) 
    at Object.batchedUpdates (ReactDefaultBatchingStrategy.js:62) 
    at Object.batchedUpdates (ReactUpdates.js:97) 
    at Object._renderNewRootComponent (ReactMount.js:319) 
    at Object._renderSubtreeIntoContainer (ReactMount.js:401) 
    at Object.render (ReactMount.js:422) 
    at Object../src/index.js (index.js:21) 
    at __webpack_require__ (bootstrap 0a6128d5488129446b34:669) 
    at fn (bootstrap 0a6128d5488129446b34:87) 
    at Object.0 (registerServiceWorker.js:108) 
    at __webpack_require__ (bootstrap 0a6128d5488129446b34:669) 
    at bootstrap 0a6128d5488129446b34:715 
    at bundle.js:719 

私はReact.jsを使用して、私のpackage.json

{ 
    "name": "myproject", 
    "version": "0.1.0", 
    "private": true, 
    "dependencies": { 
    "aws-sdk": "^2.105.0", 
    "material-ui": "^0.19.0", 
    "react": "^15.6.1", 
    "react-dom": "^15.6.1", 
    "react-scripts": "1.0.12" 
    }, 
    "scripts": { 
    "api": "node src/api/index.js", 
    "start": "react-scripts start", 
    "build": "react-scripts build", 
    "test": "react-scripts test --env=jsdom", 
    "eject": "react-scripts eject" 
    } 
} 
+0

あなたは 'new Promise'を使う必要があります - 約束は、そのコールバックの中の' return'が無意味であるという事実を変更しません。しかし、実際には、組み込みの約束サポートを使用してください:-) – Bergi

答えて

0

、私がしなければならなかったすべてはそれだ

let getAwsInstancesInfo = function() { 
    return ec2.describeInstances().promise(); 
}; 

ました。大変ありがとう@ kangsu!

関連する問題