私は次のコードのような.then
メソッドの内部での約束の値にアクセスすることができます知っている:上記の例で関数からPromiseの値を返すにはどうすればよいですか?
const Promise = require("bluebird");
const fs = Promise.promisifyAll(require('fs'));
const mergeValues = require('./helper').mergeValues;
fs.readFileAsync('./index.html', {encoding: "utf8"})
.then((data) => {
return mergeValues(values, data); //async function that returns a promise
})
.then((data) => {
console.log(data);
});
、私は、ファイルからの読み込みいくつかの値を使用してデータをマージした後、ログインしていますデータをコンソールに送信します。
しかし、通常は同期関数のように、関数から値を返すのはどうですか?私はthis comment on synchronous inspectionに従っている場合、私はコードは次のようになりますと思う:
function getView(template, values) {
let file = fs.readFileAsync('./' + template, {encoding: "utf8"});
let modifiedFile = file.then((data) => {
return mergeValues(values, data);
});
return modifiedFile.then((data) => {
return modifiedFile.value();
});
}
console.log(getView('index.html', null));
しかし、いくつかの理由で、それは働いていません。私がコンソールに入っているのは、値ではなくPromiseオブジェクトだけです。そして、.isFulfilled
メソッドをmodifiedFile
に追加すると、true
に出力されます。だから私は間違って何をやっているのか分かりません。
asyncから値を返すことは決してできません。これまで標準的な答え:[非同期呼び出しから応答を返すにはどうすればいいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Amadan
非同期呼び出しにコミットすると、その操作の結果に依存するすべてのものは、定義上asyncも同様です。つまり、あなたの関数でPromiseを使用していて、それから何かを得る必要がある場合は、約束を返します。待つことはできません。 – tadman