Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Promise.all()如果Promise不是';t解决_Javascript_Promise - Fatal编程技术网

Javascript Promise.all()如果Promise不是';t解决

Javascript Promise.all()如果Promise不是';t解决,javascript,promise,Javascript,Promise,我正在构建一个javascript小部件,将iframe加载到页面上,但为了防止每次请求时加载iframe,首先需要进行API查找,以检查被请求加载到iframe中的设备是否确实存在于数据库中 我遇到的问题是,如果数据库中不存在products中的某个项目(这很可能发生),那么该承诺将无法得到解决,从而停止promise.all(promises)。然后()我需要这个数据数组来将解析的设备传递到iframe中 任何帮助都将不胜感激 function sendAPIRequest (product

我正在构建一个javascript小部件,将iframe加载到页面上,但为了防止每次请求时加载iframe,首先需要进行API查找,以检查被请求加载到iframe中的
设备是否确实存在于数据库中

我遇到的问题是,如果数据库中不存在
products
中的某个项目(这很可能发生),那么该承诺将无法得到解决,从而停止
promise.all(promises)。然后()我需要这个
数据
数组来将解析的设备传递到iframe中

任何帮助都将不胜感激

function sendAPIRequest (product) {

    return new Promise(function (resolve, reject) {

        var url = 'http://localhost:3000/api/product_availability?__url_path_param=';

        var xhr = createAPIRequest('GET', url + product);

        if (!xhr) {
            return;
        }

        xhr.onload = function () {

            if (xhr.status == 200) {

                resolve(product);

            } else {

                reject(Error(xhr.statusText));

            }

        };

        xhr.onerror = function () {

            reject(Error('Error fetching data...'));

        };

        xhr.send();


    });

}


function formatProductName (product) {

    return product.replace(/ /g,"+").toLowerCase();

}


function getProducts () {

    var promises = [];

    for (var i in products) {

        promises.push(sendAPIRequest(formatProductName(products[i].product_name)));

    }

    Promise.all(promises).then(function (data) {

        console.log(data);

    }).catch(function (err) {

        console.log(err);

    });


}

getProducts();
解析所有承诺后,将调用
Promise.all().done
。你拒绝了一些承诺

执行
失败
或始终使用成功或错误值解决。这实质上是将错误处理向下移动

if (xhr.status == 200) {
    resolve({ status: "ok", product: product });
} else {
    resolve({ status: "fail" });
}

您还可以考虑对一个非现有产品的请求成功并返回一个错误体,而不是产品数据。

<代码> Posiv.AL()。你拒绝了一些承诺

执行
失败
或始终使用成功或错误值解决。这实质上是将错误处理向下移动

if (xhr.status == 200) {
    resolve({ status: "ok", product: product });
} else {
    resolve({ status: "fail" });
}

您还可以考虑对一个非现有产品的请求成功并返回一个错误体,而不是产品数据。

<代码> Posiv.AL()。你拒绝了一些承诺

执行
失败
或始终使用成功或错误值解决。这实质上是将错误处理向下移动

if (xhr.status == 200) {
    resolve({ status: "ok", product: product });
} else {
    resolve({ status: "fail" });
}

您还可以考虑对一个非现有产品的请求成功并返回一个错误体,而不是产品数据。

<代码> Posiv.AL()。你拒绝了一些承诺

执行
失败
或始终使用成功或错误值解决。这实质上是将错误处理向下移动

if (xhr.status == 200) {
    resolve({ status: "ok", product: product });
} else {
    resolve({ status: "fail" });
}

您还可以考虑对一个非现有产品的请求成功并返回一个错误体而不是产品数据。