我的承诺如下:
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");
会怎样?
有人可以帮助我吗?谢谢。
答案 0 :(得分:1)
值得一提的是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
对象,例如以下示例:
function delay(duration) {
return new Promise(resolve => setTimeout(resolve, duration));
}
delay(1000).then(() => {
console.log('this code is delayed by 1s');
});
答案 1 :(得分:0)
resolve()
确实按照名称所说:解析了在函数调用中返回值的承诺。
因此,如果您有一个诺言并且要用resolve('aaaaa')
解决,这意味着您的诺言将返回成功状态,其值为'aaaaa'。
您也可以拒绝诺言。这意味着您在某个时候打过的电话失败了。与resolve()
类似,reject()
接受应由promise返回的参数。
答案 2 :(得分:0)
承诺有两个参数resolve
和reject
,用于将响应发送回调用代码。
如果您的诺言完成了代码而没有错误,那么您可以resolve()
,通过发回响应(可以是您想要的任何内容)来进行reject()
,如果失败,您可以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函数的参数将在 then 回调中发送回调用函数,而拒绝函数的参数可以在 catch 中找到打回来。
例如
resolve
您可以将return
视为异步上下文中的reject
,而throw
与resolve(myVariable)
相似,只是一个异常,该异常将被调用代码捕获
因此myVariable
将返回resolve('aaa')
到调用promise函数的代码,而ALTER TABLE mytable
ADD UNIQUE (id,loan_type,term,oldestyear)
将始终将“ aaa”返回到调用代码。
答案 3 :(得分:0)
它所要做的就是使用参数resolve
而不是其原始值调用成功回调"aaaa"
。
假设您传递了回调函数console.log
。如果诺言得以解决(即成功),则将使用传递的参数(console.log("aaaa")
)调用回调
如果无法解决-如果未成功-则将根据您的reject
语句调用.catch()
回调。