質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

2回答

250閲覧

NOde.jsで同期処理

seri

総合スコア422

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2017/06/26 21:48

編集2022/01/12 10:55

exportsをして受け取った関数内で同期処理を書いているのですが、以下のような実装の場合変数が途中で変わる事があるおそれがあります。この場合どういった実装に変えればいいのでしょうか?

追記:

var async = require('async'); exports.Func=function(x){//x は['A', 'B', 'C', 'D', 'E', 'F']等の中身がランダムな配列 var i = 0; async.eachSeries(arr, function(s, callback) { console.log(x[i]); i++; } }

上記の変数のiは同時アクセスが有った場合上書きされてしまいますが、それでも大丈夫なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

以下のような考え方があり得ると思います。

(1) 「ここの同期処理内で、yが書き換えられる恐れがある」という部分で「yを書き換えないように考える」という方法

(2) 「ここの同期処理内で、yが書き換えられる恐れがある」という部分で「yを書き換えないようにすることが不可能」な場合、書き換えられると非同期処理で都合が悪いならyの構造をコピーし、コピーした方を非同期処理で参照する方法

コピーといっても構造の複雑さによってさまざまであり、シャローコピー(浅いコピー)でよい場合もあるでしょうしディープコピー(構造の入れ子の奥の方まで深くコピー)でないと困る場合もあるでしょう。

どういう方法が適切かは状況に応じて変わると思います。もう少し具体的な例(どういうデータに対してどういう処理をしたいのか)を提示しないと、具体的な回答はしづらいと思います。

投稿2017/06/26 23:28

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

クロージャの内部でvarを使って変数を定義しているから、外のスコープのyとは違う扱いになっていると思いますが、実際に実行してみて書き換えられている感じなのでしょうか?

投稿2017/06/26 22:55

yoorwm

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問