據Mozilla,等待只待承諾:是否等待等待諾言般的對象?
[RV]返回承諾的解析值,或本身的價值,如果它不是一個承諾。
如果您等待非承諾,已解決的承諾將立即返回,並且不會等待。但是,以下代碼正在等待,而不使用Chrome中的Promises & FF。
var obj = {
then:func => obj.func=func
};
setTimeout(() => obj.func(57), 1000);
async function go() {
var res = await obj;
console.log(res); //shows '57' after 1000ms
}
go();
根據該規範,應等待等待許狀物體不屬於承諾? (我試過看規格(從Mozilla的文章鏈接),但我無法理解。)
主要問題是什麼承諾爲ES-transpiler /解釋器,其執行等待操作。例如,您可以使用藍鳥承諾,但默認配置下的babel將無法理解它。主要定義之一是'promise === Promise.resolve(promise)',但是編譯時轉譯器無法看到它。 –
在實踐中,最有可能的是,Promise是一些有意思的東西,這意味着再生器運行時的Promise,這被廣泛用於實現。有關詳細信息,請參閱https://babeljs.io/docs/plugins/transform-async-generator-functions/。 –
其實它使用的承諾,你就看不出來:-)順便說一句,這些「承諾狀物體」也被稱爲[* thenables *](https://stackoverflow.com/q/29435262/1048572)。 – Bergi