[英]Why i need to resolve a response in promise
我有一個像下面這樣的承諾:
let promise = new Promise((resolve, reject) => {
axios.post("https://httpbin.org/post", params, header)
.then(response => {
resolve(Object.assign({}, response.data));
// resolve("aaaa");
console.log(response);
})
.catch(error => reject(error))
});
為什么我需要用響應數據來解決這個承諾?
如果我替換resolve(Object.assign({}, response.data));
會發生什么? 逐行resolve("aaaa");
?
任何人都可以幫助我嗎? 謝謝你。
值得一提的是axios.post()
已經返回了一個Promise
所以你不需要將它包裝在另一個Promise
中。
這將起作用:
let promise = axios.post("https://httpbin.org/post", params, header)
.then(response => {
console.log(response);
return Object.assign({}, response.data);
});
// Later on...
promise.then(data => {
console.log('Request successful:', data);
}, err => {
console.log('Request failed:', err);
});
僅當您沒有鏈接現有的Promise
時,才需要構造新的Promise
對象,如下例所示:
function delay(duration) {
return new Promise(resolve => setTimeout(resolve, duration));
}
delay(1000).then(() => {
console.log('this code is delayed by 1s');
});
resolve()
就像名字所說的那樣:它解析在函數調用中返回值的承諾。
因此,如果您有一個承諾並且它正在使用resolve('aaaaa')
,這意味着您的承諾將返回一個成功的狀態,其值為 'aaaaa'。
你也可以拒絕這個承諾。 這意味着您所做的呼叫在某些時候失敗了。 與resolve()
類似, reject()
接受應由承諾返回的參數。
Promise 有兩個參數, resolve
和reject
,用於將響應發送回調用代碼。 如果您的承諾沒有錯誤地完成了它的代碼,那么您通過發送回響應(它可以是您想要的任何內容)來resolve()
它,如果它失敗了,則reject()
它,通常將錯誤作為參數傳遞。
resolve 函數的參數會被發送回調用函數,在then回調中,而reject 函數的參數可以在catch回調中找到。
例如
function myFunction(){
return new Promise((resolve, reject) => {
try{
/* Do some async calls here */
resolve(result); //Result is what you will find in "then"
}catch(e){
reject(e);
}
});
}
myFunction().then((response) => {
/* Your logic here*/
}).catch((err) => {
console.error(err);
}
您可以將resolve
視為異步上下文中的return
,而reject
類似於throw
將被調用代碼捕獲的異常。
因此, resolve(myVariable)
會將myVariable
返回給調用 promise 函數的代碼,而resolve('aaa')
將始終向調用代碼返回“aaa”。
它要做的就是使用參數"aaaa"
而不是其原始值調用成功回調resolve
。
假設您傳遞了回調函數console.log
。 如果承諾解決,即成功,則將使用傳遞的參數調用回調( console.log("aaaa")
)
如果它沒有解決——如果它不成功——那么reject
回調將根據你的.catch()
語句被調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.