aboutsummaryrefslogtreecommitdiff
path: root/files/ja/mozilla/tech/xpcom/language_bindings/components.lastresult/index.html
blob: d830cc301c850f3c6b8cc403058fc99876d5aee3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
---
title: Components.lastResult
slug: Mozilla/Tech/XPCOM/Language_Bindings/Components.lastResult
tags:
  - 'XPCOM:Language Bindings'
  - XPConnect
translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.lastResult
---
<p>
</p><p><code>Components.lastResult</code> は XPConnect を介した直前の <a href="ja/XPCOM">XPCOM</a> メソッド呼び出しの結果コードである数値コード <code>nsresult</code> を返します。
</p>
<h2 id="はじめに"> はじめに </h2>
<p><code>Components.lastResult</code> は一般的に、「成功」コードを返す XPCOM メソッドの結果のテストにのみ役立ちます。というのは、失敗した結果コードは XPConnect が例外に変換して、呼び出し元の JavaScript メソッドへ投げるからです。ほとんどのインターフェースは 1 つの成功コード (<code>NS_OK</code>) だけを返すので、<code>Components.lastResult</code> はほとんど必要ありません。
</p><p><code>Components.lastResult</code> が利用される場合は、対象の呼び出しの後テストのためにローカル変数に保存することが、複数のテストを <code>Components.lastResult</code> に対して行うよりも適当です。多くの「Components」プロパティとメソッドは XPConnect で実装されていて、それに続く <code>Components.lastResult</code> 呼び出しは対象とした呼び出しでなく「暗黙的な」 XPConnect 呼び出しの結果を返すかもしれないからです。
</p>
<h2 id="実例"> 実例 </h2>
<p>In the following example, the local variable <code>i</code> contains the actual result returned by <code>bar()</code> (assuming that <code>bar()</code> is called via XPConnect), and <code>Components.lastResult</code> contains the success code returned by <code>bar()</code>.
</p>
<pre class="eval">// Given that foo.bar is a method that might return
// the success codes NS_OK, '5', and '6' OR some error code...
try
{
  var i = foo.bar();

  switch (Components.lastResult)
  {
    case Components.results.NS_OK:
      // NS_OK is good!
      break;
    case 5:
      // do something with 5 here
      break;
    case 6:
      // do something with 6 here
      break;
    default:
      // this was a success code we did not expect. Bad component!
      break;
  }
  // and so on....
}
catch (e)
{
  // the call threw an exception or a native component returned
  // a failure code!
  if (e instanceof Components.interfaces.nsIXPCException)
  {
    // we might do something interesting here with the exception object
    var rv = e.result;
  }
  else
  {
    // if we don't know how to handle it then rethrow
    throw e;
  }
}
</pre>