gpt4 book ai didi

javascript - 链式 promise - 正确的方法

转载 作者:行者123 更新时间:2023-12-01 01:49:37 25 4
gpt4 key购买 nike

我正在尝试使用 Javascript 创建一个 Excel 加载项,该加载项需要异步函数将 JS promise 返回到 Excel,并且使用回调函数使用最终值解析该 promise 。我对 promise 很陌生,花了几个小时阅读和测试它,但没有成功,并希望有人能帮助我理解我做错了什么。下面是代码:

function TEST(num1) {
return new Promise(function (resolve) {
var corsproxy = "https://cors-anywhere.herokuapp.com/"
var apiurl = "https://randomapi.com/testapi"

var data = getData(corsproxy+apiurl).then(function(result){
console.log ("here it comes")
console.log(result.meta.status) /// This returns "Success"
return (result.meta.status) /// I need this to be resolved
})
console.log("last")
resolve(data)
})
};

/// Get JSON
function getData(url) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function () {
try {
if (xhr.status === 200) {
resolve(xhr.response);
}
else if (xhr.status !== 200) {
reject({
error: 'Request failed. ' + xhr.response
});
}
} catch (e) {
reject({
error: e
});
}
};
xhr.send();
});
}

第二个函数 getData 按预期工作并返回 JS 对象。我试图用 TEST 函数完成的任务是:

  1. 创建一个新的 Promise - 这需要解决/返回为“成功”
  2. 使用 getData 调用 API 数据(暂时通过代理运行以绕过 CORS 错误)
  3. 提取meta.status值(“Success”)

我尝试了许多不同的方法,但当前代码“最后”写入并在 getData 函数完成之前解析未定义的数据。将“return (result.meta.status)”更改为“resolve (result.meta.status)”也没有帮助。

任何有关我做错的事情的帮助将不胜感激。

最佳答案

function TEST(num1) {
var corsproxy = "https://cors-anywhere.herokuapp.com/"
var apiurl = "https://randomapi.com/testapi"

return getData(corsproxy+apiurl)
}

TEST(valofnum1).then(function(result){
console.log ("here it comes")
console.log(result.meta.status) /// This returns "Success"
return (result.meta.status) /// Needs to be resolved
})

这就是你链接 promise 的方式。你没有在另一个 promise 中解决一个 promise ,

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises

关于javascript - 链式 promise - 正确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51652369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com