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>
|