

 [Panduan Referensi API AWS SDK untuk JavaScript V3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) menjelaskan secara rinci semua operasi API untuk AWS SDK untuk JavaScript versi 3 (V3). 

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Layanan panggilan secara asinkron
<a name="calling-services-asynchronously"></a>

Semua permintaan yang dibuat melalui SDK bersifat asinkron. Ini penting untuk diingat saat menulis skrip browser. JavaScript berjalan di browser web biasanya hanya memiliki satu thread eksekusi. Setelah melakukan panggilan asinkron ke AWS layanan, skrip browser terus berjalan dan dalam proses dapat mencoba mengeksekusi kode yang bergantung pada hasil asinkron sebelum kembali.

Membuat panggilan asinkron ke AWS layanan termasuk mengelola panggilan tersebut sehingga kode Anda tidak mencoba menggunakan data sebelum data tersedia. Topik di bagian ini menjelaskan perlunya mengelola panggilan asinkron dan merinci berbagai teknik yang dapat Anda gunakan untuk mengelolanya.

Meskipun Anda dapat menggunakan salah satu teknik ini untuk mengelola panggilan asinkron, kami sarankan Anda menggunakan async/await untuk semua kode baru.

async/menunggu  
Kami menyarankan Anda menggunakan teknik ini karena ini adalah perilaku default di V3.

janji  
Gunakan teknik ini di browser yang tidak mendukung async/await.

panggilan balik  
Hindari menggunakan callback kecuali dalam kasus yang sangat sederhana. Namun, Anda mungkin merasa berguna untuk skenario migrasi.

**Topics**
+ [Kelola panggilan asinkron](making-asynchronous-calls.md)
+ [Gunakan async/await](using-async-await.md)
+ [Gunakan JavaScript janji](using-promises.md)
+ [Gunakan fungsi callback anonim](using-a-callback-function.md)

# Kelola panggilan asinkron
<a name="making-asynchronous-calls"></a>

Misalnya, halaman beranda situs web e-commerce memungkinkan pelanggan yang kembali masuk. Bagian dari manfaat bagi pelanggan yang masuk adalah bahwa, setelah masuk, situs kemudian menyesuaikan diri dengan preferensi khusus mereka. Untuk membuat ini terjadi:

1. Pelanggan harus masuk dan divalidasi dengan kredensi masuk mereka.

1. Preferensi pelanggan diminta dari database pelanggan.

1. Basis data menyediakan preferensi pelanggan yang digunakan untuk menyesuaikan situs sebelum halaman dimuat.

Jika tugas-tugas ini dijalankan secara serempak, maka masing-masing harus selesai sebelum tugas berikutnya dapat dimulai. Halaman web tidak akan dapat menyelesaikan pemuatan sampai preferensi pelanggan kembali dari database. Namun, setelah kueri database dikirim ke server, penerimaan data pelanggan dapat ditunda atau bahkan gagal karena kemacetan jaringan, lalu lintas basis data yang sangat tinggi, atau koneksi perangkat seluler yang buruk.

Agar situs web tidak membeku dalam kondisi tersebut, hubungi database secara asinkron. Setelah panggilan database dijalankan, mengirimkan permintaan asinkron Anda, kode Anda terus dijalankan seperti yang diharapkan. Jika Anda tidak mengelola respons panggilan asinkron dengan benar, kode Anda dapat mencoba menggunakan informasi yang diharapkan kembali dari database ketika data tersebut belum tersedia.

![\[Menampilkan perbedaan antara eksekusi sinkron dan asinkron.\]](http://docs.aws.amazon.com/id_id/sdk-for-javascript/v3/developer-guide/images/async-vs-sync.png)


# Gunakan async/await
<a name="using-async-await"></a>

Daripada menggunakan janji, Anda harus mempertimbangkan untuk menggunakan async/await. Fungsi asinkron lebih sederhana dan membutuhkan lebih sedikit boilerplate daripada menggunakan janji. Await hanya dapat digunakan dalam fungsi asinkron untuk menunggu nilai secara asinkron.

Contoh berikut digunakan async/await untuk mencantumkan semua tabel Amazon DynamoDB Anda di. ` us-west-2`

**catatan**  
Untuk contoh ini untuk menjalankan:  
Instal klien AWS SDK untuk JavaScript DynamoDB dengan `npm install @aws-sdk/client-dynamodb` memasukkan baris perintah proyek Anda.
Pastikan Anda telah mengonfigurasi AWS kredensialnya dengan benar. Untuk informasi selengkapnya, lihat [Tetapkan kredensialnya](setting-credentials.md). 

```
import {
  DynamoDBClient,
  ListTablesCommand
} from "@aws-sdk/client-dynamodb";
(async function () {
  const dbClient = new DynamoDBClient({ region: "us-west-2" });
  const command = new ListTablesCommand({});

  try {
    const results = await dbClient.send(command);
    console.log(results.TableNames.join('\n'));
  } catch (err) {
    console.error(err)
  }
})();
```

**catatan**  
 Tidak semua browser mendukung async/await. Lihat [Fungsi async](https://caniuse.com/#feat=async-functions) untuk daftar browser dengan async/await dukungan. 

# Gunakan JavaScript janji
<a name="using-promises"></a>

Gunakan metode AWS SDK untuk JavaScript v3 klien layanan (`ListTablesCommand`) untuk membuat panggilan layanan dan mengelola aliran asinkron alih-alih menggunakan panggilan balik. Contoh berikut menunjukkan cara mendapatkan nama tabel Amazon DynamoDB Anda. `us-west-2`

```
import {
  DynamoDBClient,
  ListTablesCommand
} from "@aws-sdk/client-dynamodb";
const dbClient = new DynamoDBClient({ region: 'us-west-2' });

dbClient.listtables(new ListTablesCommand({}))
  .then(response => {
    console.log(response.TableNames.join('\n'));
  })
  .catch((error) => {
    console.error(error);
  });
```

## Koordinasikan beberapa janji
<a name="multiple-promises"></a>

Dalam beberapa situasi, kode Anda harus membuat beberapa panggilan asinkron yang memerlukan tindakan hanya jika semuanya berhasil dikembalikan. Jika Anda mengelola panggilan metode asinkron individual tersebut dengan janji, Anda dapat membuat janji tambahan yang menggunakan metode ini. `all` 

Metode ini memenuhi janji payung ini jika dan ketika berbagai janji yang Anda berikan ke metode terpenuhi. Fungsi callback dilewatkan sebuah array dari nilai-nilai dari janji-janji yang diteruskan ke `all` metode.

Dalam contoh berikut, AWS Lambda fungsi harus membuat tiga panggilan asinkron ke Amazon DynamoDB tetapi hanya dapat diselesaikan setelah janji untuk setiap panggilan terpenuhi.

```
const values = await Promise.all([firstPromise, secondPromise, thirdPromise]);

console.log("Value 0 is " + values[0].toString);
console.log("Value 1 is " + values[1].toString);
console.log("Value 2 is " + values[2].toString);

return values;
```

## Browser dan dukungan Node.js untuk janji
<a name="browser-node-promise-support"></a>

Support for native JavaScript promises (ECMAScript 2015) tergantung pada JavaScript mesin dan versi di mana kode Anda dijalankan. Untuk membantu menentukan dukungan untuk JavaScript janji di setiap lingkungan tempat kode Anda perlu dijalankan, lihat [tabel ECMAScript kompatibilitas](https://compat-table.github.io/compat-table/es6/) di GitHub.

# Gunakan fungsi callback anonim
<a name="using-a-callback-function"></a>

Setiap metode objek layanan dapat menerima fungsi callback anonim sebagai parameter terakhir. Tanda tangan dari fungsi callback ini adalah sebagai berikut.

```
function(error, data) {
    // callback handling code
};
```

Fungsi callback ini dijalankan ketika respon berhasil atau data kesalahan kembali. Jika pemanggilan metode berhasil, isi respons tersedia untuk fungsi callback dalam parameter. `data` Jika panggilan tidak berhasil, detail tentang kegagalan disediakan dalam `error` parameter.

Biasanya kode di dalam fungsi callback menguji kesalahan, yang diproses jika dikembalikan. Jika kesalahan tidak dikembalikan, kode kemudian mengambil data dalam respons dari `data` parameter. Bentuk dasar dari fungsi callback terlihat seperti contoh ini.

```
function(error, data) {
    if (error) {
        // error handling code
        console.log(error);
    } else {
        // data handling code
        console.log(data);
    }
};
```

Pada contoh sebelumnya, detail kesalahan atau data yang dikembalikan dicatat ke konsol. Berikut adalah contoh yang menunjukkan fungsi callback diteruskan sebagai bagian dari memanggil metode pada objek layanan.

```
ec2.describeInstances(function(error, data) {
  if (error) {
    console.log(error); // an error occurred
  } else {
    console.log(data); // request succeeded
  }
});
```