如何使用两个回调 return 在 JavaScript 中进行异步调用(WIX corvid)
How to return asynchronous calls in JavaScript with two callbacks (WIX corvid)
下面的异步函数returns 2个回调,所以我对return响应
做了我通常做的
- 在获取
之前添加了return
- 在结果 (
json.access_token
) 前添加 return
但这次 console.log(httpResponse, 'fetch json')
在控制台上未定义,console.log(json.access_token)
return 正确的值。
我需要更改什么?
来自客户
GetJSON(NewURLCode).then(httpResponse => {
console.log(httpResponse, 'fetch json')
}
来自服务器
GetJSON(NewURLCode){
return fetch("https://accounts.google.com/o/oauth2/token", {
"method": "post",
"headers": {
"Content-Type": 'application/x-www-form-urlencoded'
},
'body': data
}).then((httpResponse) => {
if (httpResponse.ok) {
return httpResponse.json();
} else {
return Promise.reject("Fetch did not succeed");
}
}).then((json) => {
console.log(json.access_token)
return json.access_token
}).catch(err => console.log(err));
}
与前面的函数不同,下面的函数只有一个 promise 并且 returns 来自客户端的正确对象
客户端
insert_coll ('Token',toInsert).then((ins_result) => {consule.log(ins_result)}
后端
insert_coll{
return wixData.update(myCollection, toUpdate, options)
.then( ( results) => {
let item = results; //see item below
return results
} )
.catch( (err) => {
let errorMsg = err;
} );
}
}
您可以 return 获取 本身,并在客户端中处理这些内容。
喜欢,
服务器
GetJSON(NewURLCode){
return fetch("https://accounts.google.com/o/oauth2/token", {
"method": "post",
"headers": {
"Content-Type": 'application/x-www-form-urlencoded'
},
'body': data
});
}
客户端
GetJSON(NewURLCode).then(httpResponse => {
if (httpResponse.ok) {
httpResponse.json();
} else {
Promise.reject("Fetch did not succeed");
}
}).then((json) => {
console.log(json.access_token)
return json.access_token
}).catch(err => console.log(err));
}
否则,只需 return 一个 Promise 在服务器中解析之后。喜欢,
服务器
async GetJSON(NewURLCode){
return new Promise(async (resolve, reject) => {
try {
const httpResponse= await fetch("https://accounts.google.com/o/oauth2/token", {
"method": "post",
"headers": {
"Content-Type": 'application/x-www-form-urlencoded'
},
'body': data
});
if (httpResponse.ok) {
const json = await httpResponse.json();
resolve(res.access_token);
} else {
reject("Fetch did not succeed");
}
} catch(err) {
reject(err);
}
});
}
客户端
GetJSON(NewURLCode).then(httpResponse => {
console.log(httpResponse, 'fetch json')
}).catch(err => console.log(err));
错误不是因为return的语句,我在httpResponse.json();
前加了一个return
是因为WIX onReady组件调用了两次...
所以为了解决这个问题,我使用了以下 WIX solution :
$w.onReady(function () {
if (wixWindow.rendering.env === "browser") {
//your code
}})
下面的异步函数returns 2个回调,所以我对return响应
做了我通常做的- 在获取 之前添加了return
- 在结果 (
json.access_token
) 前添加 return
但这次 console.log(httpResponse, 'fetch json')
在控制台上未定义,console.log(json.access_token)
return 正确的值。
我需要更改什么?
来自客户
GetJSON(NewURLCode).then(httpResponse => {
console.log(httpResponse, 'fetch json')
}
来自服务器
GetJSON(NewURLCode){
return fetch("https://accounts.google.com/o/oauth2/token", {
"method": "post",
"headers": {
"Content-Type": 'application/x-www-form-urlencoded'
},
'body': data
}).then((httpResponse) => {
if (httpResponse.ok) {
return httpResponse.json();
} else {
return Promise.reject("Fetch did not succeed");
}
}).then((json) => {
console.log(json.access_token)
return json.access_token
}).catch(err => console.log(err));
}
与前面的函数不同,下面的函数只有一个 promise 并且 returns 来自客户端的正确对象
客户端
insert_coll ('Token',toInsert).then((ins_result) => {consule.log(ins_result)}
后端
insert_coll{
return wixData.update(myCollection, toUpdate, options)
.then( ( results) => {
let item = results; //see item below
return results
} )
.catch( (err) => {
let errorMsg = err;
} );
}
}
您可以 return 获取 本身,并在客户端中处理这些内容。 喜欢,
服务器
GetJSON(NewURLCode){
return fetch("https://accounts.google.com/o/oauth2/token", {
"method": "post",
"headers": {
"Content-Type": 'application/x-www-form-urlencoded'
},
'body': data
});
}
客户端
GetJSON(NewURLCode).then(httpResponse => {
if (httpResponse.ok) {
httpResponse.json();
} else {
Promise.reject("Fetch did not succeed");
}
}).then((json) => {
console.log(json.access_token)
return json.access_token
}).catch(err => console.log(err));
}
否则,只需 return 一个 Promise 在服务器中解析之后。喜欢,
服务器
async GetJSON(NewURLCode){
return new Promise(async (resolve, reject) => {
try {
const httpResponse= await fetch("https://accounts.google.com/o/oauth2/token", {
"method": "post",
"headers": {
"Content-Type": 'application/x-www-form-urlencoded'
},
'body': data
});
if (httpResponse.ok) {
const json = await httpResponse.json();
resolve(res.access_token);
} else {
reject("Fetch did not succeed");
}
} catch(err) {
reject(err);
}
});
}
客户端
GetJSON(NewURLCode).then(httpResponse => {
console.log(httpResponse, 'fetch json')
}).catch(err => console.log(err));
错误不是因为return的语句,我在httpResponse.json();
是因为WIX onReady组件调用了两次...
所以为了解决这个问题,我使用了以下 WIX solution :
$w.onReady(function () {
if (wixWindow.rendering.env === "browser") {
//your code
}})