[英]Return value from a Promise constructor
考慮下面的兩個例子......
function test1() {
return new Promise(function () {
return 123;
});
}
test1()
.then(function (data) {
console.log("DATA:", data);
return 456;
})
.then(function (value) {
console.log("VALUE:", value);
});
它什么都不輸出。
function test2() {
return new Promise(function (resolve, reject) {
resolve(123);
});
}
test2()
.then(function (data) {
console.log("DATA:", data);
return 456;
})
.then(function (value) {
console.log("VALUE:", value);
});
它輸出:
DATA: 123
VALUE: 456
承諾構造函數不簡單地解析 TEST 1 中的返回值的缺點或規范矛盾是什么?
為什么它必須是與 TEST 2 不同的結果?
我試圖了解根據promise 規范構造的 promise 對象與 then-able 對象有何不同。
傳遞給Promise
的函數不是onFulfilled
或onRejected
的回調。 MDN 稱它為executor
。 將其視為 Promise 試圖捕獲的異步上下文。 從異步方法返回不起作用(或沒有意義),因此您必須調用resolve
或reject
。 例如
var returnVal = new Promise(function() {
return setTimeout(function() {
return 27;
});
});
... 沒有按預期工作。 如果您要在異步調用完成之前從executor
返回一個值,則無法重新解析承諾。
此外,隱式return undefined;
可能不return undefined;
在函數的最后。 考慮這些以相同方式運行的執行程序。
// A
function a() { return undefined; }
// B
function b() { }
什么會告訴Promise
構造函數你真的想用undefined
解析?
a() === b(); // true
值得一提的是,返回已解決的承諾有一個簡寫, Promise.resolve 。
return new Promise(function (resolve, reject) {
resolve(123);
});
簡單地變成
return Promise.resolve(123);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.